Я хочу динамически добавлять вкладки в приложении Qt в зависимости от пользовательских данных.
Одна вкладка должна быть там все время по умолчанию. Для удобства было бы здорово, если бы я мог создать макет и функции этой вкладки в графическом редакторе. Затем я хотел бы перенести этот макет в код, вставить конструктор класса и добавить вкладки, например:
ui->tabWidget->addTab(new myTabClass(), "Tab 2");
Я хочу продвигать эту вкладку также программно. Это возможно?
Для добавления вкладок динамически и с помощью класса, вы можете использовать дополнительный файл .ui. Таким образом, вы можете выполнять всю работу с макетом с помощью графического интерфейса Qt Designer.
1) Создайте пустой виджет вкладки в mainwindow.ui. (например, с именем myTabWidget)
2) Добавьте в каталог вашего проекта новый «Класс формы Qt Design» как класс QWidget, а не как QTabWidget (например, с именем MyTabPage):
Щелкните правой кнопкой мыши проект -> Добавить новый -> Qt -> Qt Design Form Class
3) В mytabpage.ui вы делаете дизайн так, как вы хотите, чтобы он был вставлен в myTabWidget.
4) Следующим шагом вы можете создать экземпляр MyTabPage в конструкторе MainWindow или в другом месте и добавить его в myTabWidget. Пустую вкладку в myTabWidget можно удалить раньше. Для доступа к параметрам из myNewTab вам нужна функция, объявленная в MyTabPage.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MyTabPage *myNewTab = new MyTabPage;
ui-> myTabWidget ->removeTab(0);
ui-> myTabWidget ->addTab(myNewTab, tr("name"))
myNewTab->functionDeclaredInMyTabPage (); //access parameters of myNewTab
}
PS: я знаю, что вопрос старый. Но я хочу предложить пошаговое решение для других, потому что недавно мне пришлось бороться с этим за себя.
Вы можете вставить вкладку с помощью int QTabWidget::insertTab ( int index, QWidget * page, const QIcon & icon, const QString & label )
который вставляет вкладку с данной меткой, страницей и значком в виджет вкладки с указанным индексом:
ui->tabWidget->insertTab(1,new myTabClass(),QIcon(QString(":/SomeIcon.ico")),"TabText");
Также удаление вкладки выполняется QTabWidget::removeTab ( int index )
,