Как динамически добавлять вкладки в Qt?

Я хочу динамически добавлять вкладки в приложении Qt в зависимости от пользовательских данных.

  1. Одна вкладка должна быть там все время по умолчанию. Для удобства было бы здорово, если бы я мог создать макет и функции этой вкладки в графическом редакторе. Затем я хотел бы перенести этот макет в код, вставить конструктор класса и добавить вкладки, например:

    ui->tabWidget->addTab(new myTabClass(), "Tab 2");

  2. Я хочу продвигать эту вкладку также программно. Это возможно?

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: я знаю, что вопрос старый. Но я хочу предложить пошаговое решение для других, потому что недавно мне пришлось бороться с этим за себя.

3

Другие решения

Вы можете вставить вкладку с помощью 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 ),

1

По вопросам рекламы [email protected]