3

こんにちは、Qt を使ったプログラミングは初めてで、QStackedLayout. Qt Creator で既にいくつかのウィジェットを設計し、それらを に追加しQStackedLayoutてメイン ウィジェットに設定しました。しかし今、メソッドを使用して、追加されたウィジェット内のボタンを使用してウィジェットを変更したいと思いますsetCurrentIndex。関数を使用する必要がありconnectますが、メインのウィジェット クラスでは、他のウィジェットからコンポーネントにアクセスしてそれらを接続することはできません。では、どうすればこれを行うことができますか?

#include "mainwindowwidget.h"
#include "ui_mainwindowwidget.h"


MainWindowWidget::MainWindowWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainWindowWidget)
{


    qApp->setStyleSheet("MainWindowWidget {background-color : red}");

    //initializing widgets
    this->mainWidget_ = new MainWidget;
    this->createGameWidget_ = new CreateGameWidget;
    this->widgets_ = new QStackedLayout;


    //adding widgets to QstackedLayout
    this->widgets_->addWidget(this->mainWidget_);
    this->widgets_->addWidget(this->createGameWidget_);

    this->setLayout(this->widgets_);
    this->showFullScreen();
    // I would like to connect the qstackedlayout
    // = widgets_ with a button placed in mainwidget_
    ui->setupUi(this);

}

MainWindowWidget::~MainWindowWidget()
{
    delete ui;
}
4

2 に答える 2

1

ここにはいくつかのオプションがあります。ボタンが のパブリック メンバーである場合は、ボタンの信号を のスロットにMainWidget接続するだけです。clicked()MainWindow

//mainwindow.h
...
public slots:
   void buttonClicked();

 

//mainwindow.cpp
...
   connect(mainWidget_->button, SIGNAL(clicked()), this, SLOT(buttonClicked()));
...
void buttonClicked()
{
   //do what you want to do here...
}

もう 1 つのオプションは、MainWidgetクラスでカスタム シグナルを作成することです。次に、ボタンのclicked()信号をこのカスタム信号に接続します。

//mainwidget.h
...
signals:
   void buttonClickedSignal();

 

//mainwidget.cpp
   connect(button, SIGNAL(clicked()), this, SIGNAL(buttonClickedSignal()));

次に、buttonClickedSignal()信号を のスロットに接続しますMainWindow

//mainwindow.cpp
   connect(mainWidget_, SIGNAL(buttonClickedSignal()), this, SLOT(buttonClicked()));

MainWidget3 番目のオプションは、ボタンへのポインターを返す関数をクラスに追加することです。次に、クラスでこの関数を呼び出し、MainWindowそのポインターを使用してボタンをスロットに接続します。

//mainwidget.h
...
public:
   QPushButton* getButton();
...

  

//mainwdiget.cpp
...
QPushButton* getButton()
{
   return button;
}
...

 

//mainwindow.cpp
...
   QPushButton *button = mainWidget_->getButton();
   connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()));
于 2013-08-27T06:54:17.147 に答える