我想在主窗口中单击按钮时动态创建新选项卡。让此按钮为NEW。我在主窗口放置了QWidget
,我希望QTabWidget
可见。我添加了一个名为TabWidget(QTabWidget
)的新表单,其中包含我的第一页设计。
我这样做了:
page1 = new TabWidget(ui->widget); // TabWidget inherits QTabWidget
this->centralWidget()->layout()->addWidget(page1);
获得QWidget
的第一页。这样做了。
我尝试使用BACK
和NEXT
按钮实现从一个标签到另一个标签的遍历。
我在窗口小部件(名为form2)而不是QTabWidget
中设计了第二个标签,我使用以下方法从第一个标签调用此表单:
page2 = new Form2(); // Form2 contains the tab2 design
TabWidget::addTab(page2,"Scalar Parameters"); // Only this works, I couldn't use objects
TabWidget::setCurrentWidget(page2);
问题出现了:
我不能为第三个标签做同样的事情。
page3 = new Form3(); // Form3 contains the tab3 design
TabWidget *t= new TabWidget();
t->addTab(page3,"Table Parameters");
t->setCurrentWidget(page3);
我在这里缺少什么?
我有这些文件,
mainframe.h,
tabwidget.h(继承QTabWidget
)这也是我的第一个标签,
tabwidget2.h(继承QWidget
)第二个标签,
tabwidget3.h(继承QWidget
)第3个选项卡。
我在mainframe.h中包含了tabwidget.h并为它创建了一个对象page1。因此,当在大型机上单击按钮时,我会这样做,
TabWidget *page1 = new TabWidget();
this->centralWidget()->layout()->addWidget(page1);
这会在大型机上创建一个带有我设计的标签。这非常有效。然后我在这个标签页1中有一个NEXT按钮。所以当我点击它时,我想在这个pag1中添加一个新的标签页2。为此,我在tabwidget.h中包含了tabwidget2.h并创建了一个对象page2。现在,当我在page1中点击一个按钮时,我就这样做了,
tabwidget2 *page2 = new tabwidget2();
tabwidget *t= new tabwidget();
t->addTab(page2,"Scalar Parameters");
t->setCurrentWidget(page2);
但这不起作用。所以我这样做了,
tabwidget2 *page2 = new tabwidget2(t);
tabwidget::addTab(page2,"Scalar Parameters");
tabwidget::setCurrentWidget(page2);
这很有效,我将第二页添加到第一个标签页。当我从page2单击NEXT按钮时添加第3页时出现问题。我这样做了,
tabwidget3 *page3 = new tabwidget3();
tabWidget *t= new tabWidget();
t->addTab(page3,"Table Parameters");
t->setCurrentWidget(page3);
并没有奏效。程序编译没有任何错误。
主机 - > (新按钮) - > page1(在大型机上的Widget上显示QTabWidget
) - > (下一步按钮) - >第2页(QWidget
作为新标签添加到第1页) - > (下一步按钮) - >没有任何反应
我尽力解释这个问题。请帮帮我。
代码: mainframe.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "tabwidget.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
TabWidget *page1;
~MainWindow();
private slots:
void on_action_About_triggered();
void on_action_New_triggered();
private:
Ui::MainWindow *ui;
};
Tabwidget.h
#ifndef TABWIDGET_H
#define TABWIDGET_H
#include <QTabWidget>
#include "tabwidget2.h"
namespace Ui {
class TabWidget;
}
class TabWidget : public QTabWidget
{
Q_OBJECT
public:
explicit TabWidget(QWidget *parent = 0);
~TabWidget();
tabwidget2 *page2;
private slots:
void on_pushButton_6_clicked();
private:
Ui::TabWidget *ui;
};
#endif // TABWIDGET_H
tabwidget2.h
#ifndef TABWIDGET2_H
#define TABWIDGET2_H
#include <QWidget>
#include "tabwidget3.h"
namespace Ui {
class tabwidget2;
}
class tabwidget2 : public QWidget
{
Q_OBJECT
public:
explicit tabwidget2(QWidget *parent = 0);
~tabwidget2();
tabwidget3 *page3;
private slots:
void on_pushButton_2_clicked();
private:
Ui::tabwidget2 *ui;
};
#endif // TABWIDGET2_H
mainframe.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QtWidgets"
#include "qtabwidget.h"
#include "qdialog.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_action_New_triggered()
{
TabWidget *page1 = new TabWidget();
this->centralWidget()->layout()->addWidget(page1);
}
tabwidget.cpp
#include "tabwidget.h"
#include "ui_tabwidget.h"
TabWidget::TabWidget(QWidget *parent) :
QTabWidget(parent),
ui(new Ui::TabWidget)
{
ui->setupUi(this);
}
TabWidget::~TabWidget()
{
delete ui;
}
void TabWidget::on_pushButton_6_clicked()
{
tabwidget2 *page2 = new tabwidget2();
this->addTab(page2,"Scalar Parameters");
this->setCurrentWidget(page2);
}
tabwidget2.cpp
#include "tabwidget2.h"
#include "ui_tabwidget2.h"
#include "tabwidget.h"
tabwidget2::tabwidget2(QWidget *parent) :
QWidget(parent),
ui(new Ui::tabwidget2)
{
ui->setupUi(this);
}
tabwidget2::~tabwidget2()
{
delete ui;
}
void tabwidget2::on_pushButton_2_clicked()
{
tabwidget3 *page3 = new tabwidget3();
TabWidget *t= new TabWidget();
t->addTab(page3,"Table Parameters");
t->setCurrentWidget(page3);
}
我无法引入我的第3页。
答案 0 :(得分:1)
您的代码中存在一些错误。这是您向QTabWidget
QTabWidget *tabwidget = new QTabWidget(ui->centralWidget);
tabwidget->setObjectName(QString("tabbar"));
QWidget *tab = new QWidget();
tabwidget->addTab(tab, "tab1");
QWidget *tab2 = new QWidget();
tabwidget->addTab(tab2, "tab2");
tabwidget->setCurrentWidget(tab2);
// etc.
所以在你的情况下,它可能是:
page1 = new TabWidget(ui->centralWidget);
page2 = new Form2();
page1->addTab(page2, "Scalar Parameters");
page1->setCurrentWidget(page2);
page3 = new Form3();
page1->addTab(page3, "Table Parameters");
page1->setCurrentWidget(page3);
您必须向Form
添加标签(QTabWidget
类),这意味着将它们添加到page1
对象。
如果您想从无法访问page1
的地方添加标签,我会将ObjectName添加到page1
,以便您以后可以搜索。
TabWidget *page1 = new TabWidget();
this->centralWidget()->layout()->addWidget(page1);
page1->setObjectName("TabWidget"); //name it whatever you want
然后在添加新标签时执行:
tabwidget3 *page = new tabwidget3()
TabWidget *temporary = ui->centralWidget->findChild<TabWidget *>("TabWidget");
temporary->addTab(page3, "name");
temoprary->setCurrentWidget(page3);
不要创建新的TabWidget
。 QTabWidget就像是标签的容器,如果你想添加一个标签,你必须将它添加到现有的标签中。