0

メインウィンドウでボタンがクリックされたときに動的に新しいタブを作成したかったのです。このボタンを NEW にします。QWidgetを表示したいメインウィンドウにを配置しましたQTabWidgetQTabWidget最初のページ デザインを含むTabWidget ( ) という名前のクラスを持つ新しいフォームを追加しました。

これは私がしました:

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

の最初のページを取得しましたQWidget。これで完了です。

BACKNEXTボタン を使用して、あるタブから別のタブへのトラバースを実装しようとしました。

代わりにウィジェット(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 ( QWidgetpage1 に新しいタブとして追加) -> (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 に答える