メインウィンドウでボタンがクリックされたときに動的に新しいタブを作成したかったのです。このボタンを NEW にします。QWidget
を表示したいメインウィンドウにを配置しましたQTabWidget
。QTabWidget
最初のページ デザインを含むTabWidget ( ) という名前のクラスを持つ新しいフォームを追加しました。
これは私がしました:
page1 = new TabWidget(ui->widget); // TabWidget inherits QTabWidget
this->centralWidget()->layout()->addWidget(page1);
の最初のページを取得しましたQWidget
。これで完了です。
BACK
とNEXT
ボタン を使用して、あるタブから別のタブへのトラバースを実装しようとしました。
代わりにウィジェット(form2という名前)の2番目のタブを設計し、次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);
ここで問題が発生
します。3 番目のタブで同じことを行うことができませんでした。
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
) 2 番目のタブ、tabwidget3.h (継承QWidget
) 3 番目のタブです。
tabwidget.h を mainframe.h に含め、そのオブジェクトである page1 を作成しました。メインフレームでボタンがクリックされると、私はこれを行います。
TabWidget *page1 = new TabWidget();
this->centralWidget()->layout()->addWidget(page1);
これにより、メインフレームに私のデザインのタブが作成されます。これは完全に機能します。次に、このタブページ1に[次へ]ボタンがあります。それをクリックすると、このページ1に新しいタブページ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);
これは機能し、2 番目のページが 1 番目のタブに追加されました。page2 から NEXT ボタンをクリックしたときに 3 ページ目を追加すると問題が発生します。これは私がしました、
tabwidget3 *page3 = new tabwidget3();
tabWidget *t= new tabWidget();
t->addTab(page3,"Table Parameters");
t->setCurrentWidget(page3);
そしてうまくいきませんでした。プログラムはエラーなしでコンパイルされます。Mainframe -> (New ボタン) -> page1(QTabWidget
メインフレームのウィジェットに表示される) -> (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を持ち込むことができません。