Динамически добавляя вкладку 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++. Вы можете создать графически некоторый пользовательский интерфейс шаблона, который обеспечивает начальную настройку, а затем добавить определенные настройки в коде. Это может быть полезно, если между несколькими вкладками изменяется только несколько подвиджетов. Я сделал нечто подобное с пользовательским интерфейсом, который также был основан на вкладках.