0

我想在主窗口中单击按钮时动态创建一个新选项卡。让这个按钮成为新的。我已经QWidget在我希望QTabWidget可见的主窗口中放置了一个。我添加了一个名为 TabWidget ( QTabWidget) 的新表单,其中包含我的第一个页面设计。

我这样做了:

page1 = new TabWidget(ui->widget);  // TabWidget inherits QTabWidget
this->centralWidget()->layout()->addWidget(page1);

得到了我的第一页QWidget。这个完成了。

我尝试使用BACKNEXT按钮实现从一个选项卡到另一个选项卡的遍历。

我在一个小部件(名为 form2)而不是 a 中设计了第二个选项卡,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)第三个选项卡。

我在 mainframe.h 中包含了 tabwidget.h 并为它创建了一个对象 page1。因此,当单击大型机上的按钮时,我会这样做,

TabWidget *page1 = new TabWidget();
this->centralWidget()->layout()->addWidget(page1);

这将在大型机上创建一个带有我的设计的选项卡。这完美地工作。然后我在这个标签page1中有一个NEXT按钮。所以当我点击它时,我想在这个page1中添加一个新的标签page2。为此,我在 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);

这有效,我将第二页添加到我的第一个标签中。当我从第 2 页单击“下一步”按钮时添加第 3 页时出现问题。我这样做了,

tabwidget3 *page3 = new tabwidget3();
tabWidget *t= new tabWidget();
t->addTab(page3,"Table Parameters");
t->setCurrentWidget(page3);

并没有工作。程序编译没有任何错误。主机 ->(新建按钮)-> page1(QTabWidget显示在主机上的 Widget 上)->(NEXT 按钮)-> page2(QWidget作为新选项卡添加到 page1)->(NEXT 按钮)-> 没有任何反应

我已尽力解释这一点。请帮帮我。

代码: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

大型机.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 页。

4

1 回答 1

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 就像选项卡的容器,如果要添加选项卡,则必须将其添加到现有选项卡中。

于 2014-01-18T11:40:08.383 回答