gpt4 book ai didi

qt - 使用 QStackedLayout 创建一个小部件

转载 作者:行者123 更新时间:2023-12-01 14:30:02 26 4
gpt4 key购买 nike

大家好,我是 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;
}

最佳答案

这里有几个选项。如果您的按钮是 MainWidget 的公共(public)成员,那么您只需将按钮的 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...
}

另一种选择是在您的 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()));

第三种选择是向您的 MainWidget 类添加一个函数,该函数返回一个指向您的按钮的指针。然后在您的 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()));

关于qt - 使用 QStackedLayout 创建一个小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18456848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com