Динамически добавляя вкладку qt 5.1

Мне трудно понять, как мне это сделать. у меня есть QWidget Главное окно и имеет QTabWidget внутри VBoxLayout, Основная функция окна - вести чаты людей, которые общаются с нашим программным обеспечением.

Поэтому мне нужно иметь возможность динамически добавлять вкладки, когда люди открывают новый чат. например, если я общаюсь с человеком A и нажимаю на человека B в моем списке чата, то, если окно открыто, добавьте еще одну вкладку в QTabWidget Если окно не открыто, просто создайте новое окно.

Теперь в каждой вкладке достаточно сложный макет, так как у меня есть смайлики и множество других вещей, с которыми приходится иметь дело, поэтому я бы не стал писать все это в коде.

Есть ли способ, которым я могу подкласс QTab и просто использовать этот класс для каждой вкладки? И второй вопрос: я пришел из андроидного фона в программировании, поэтому я привык иметь возможность многократно использовать макет XML для каждого экземпляра подкласса вкладок (в данном случае), есть ли в любом случае, я могу сделать нечто подобное с QML для каждого подкласса?

Если я пойду по этому пути совершенно неправильно, я буду очень признателен за помощь.

2 ответа

Решение

Вам не нужно подкласс QTab ради добавления этого. QTabWidget имеет удобный метод int QTabWidget::addTab(QWidget * page, const QString & label), Вы можете добавить свои виджеты в QTabWidget непосредственно.

Ссылка на описание: http://qt-project.org/doc/qt-5/qtabwidget.html

Есть ли способ, которым я могу создать подкласс QTab и просто повторно использовать этот класс для каждой вкладки

Да, вы можете создать подкласс QTabWidget. Ничто не мешает вам сделать это. Но если это только для настройки пользовательского интерфейса, я обычно делаю

QLayout* setupViewLayout()
{
   //add bunch of stuff to layout
}

QTabWidget * tabwidget = new QTabWidget ;
QLayout* tablayout = setupViewLayout();
QWidget* widget = new QWidget;

widget->setLayout(tablayout );
tabwidget->addTab(widget);

И мне не нужно создавать один класс для каждого вида, который я хочу.

Есть ли в любом случае я могу сделать аналогичные вещи с QML для каждого подкласса?

Да, у вас есть QT Quick Designer для QML и Qt Designer для создания файлов UI, которые будут компилироваться как c / C++. Вы можете создать графически некоторый пользовательский интерфейс шаблона, который обеспечивает начальную настройку, а затем добавить определенные настройки в коде. Это может быть полезно, если между несколькими вкладками изменяется только несколько подвиджетов. Я сделал нечто подобное с пользовательским интерфейсом, который также был основан на вкладках.

Другие вопросы по тегам