gpt4 book ai didi

c++ - 如何获取哪个 QradioButton 调用 SLOT

转载 作者:太空狗 更新时间:2023-10-29 23:51:53 26 4
gpt4 key购买 nike

我创建了几个 QradioButton 并连接到同一个 SLOT。在插槽中,我想知道哪个 QradioButton 调用插槽并执行相关操作。我发现有一种使用 qobject_cast 和 QObject::sender() 的方法,但它似乎不起作用。这是代码:

头文件:

class dialoginput : public QDialog
{
Q_OBJECT

public:
dialoginput(QWidget *parent = 0);
QRadioButton *radio1;
QRadioButton *radio2;
QRadioButton *radio3;
private slots:
void setText_2();
private:
QLabel *label_0_0;
QLabel *label_1;
};

主文件:

dialoginput::dialoginput(QWidget *parent): QDialog(parent){

label_0_0 = new QLabel("label_1:");
label_1 = new QLabel;

QWidget *window = new QWidget;
QVBoxLayout *windowLayout = new QVBoxLayout;

QGroupBox *box = new QGroupBox("Display Type");
radio1 = new QRadioButton("3");
radio2 = new QRadioButton("5");
radio3 = new QRadioButton("9");
QVBoxLayout *radioLayout = new QVBoxLayout;

connect(radio1,SIGNAL(clicked()),this,SLOT(setText_2()));
connect(radio2,SIGNAL(clicked()),this,SLOT(setText_2()));
connect(radio3,SIGNAL(clicked()),this,SLOT(setText_2()));

radioLayout->addWidget(radio1);
radioLayout->addWidget(radio2);
radioLayout->addWidget(radio3);

box->setLayout(radioLayout);

windowLayout->addWidget(box);
windowLayout->addWidget(label_0_0);
windowLayout->addWidget(label_1);

window->setLayout(windowLayout);
window->show();

}
void dialoginput::setText_2(){

QObject *object = QObject::sender();
QRadioButton* pbtn = qobject_cast<QRadioButton*>(object);
QString name = pbtn->objectName();

label_1->setText(name);

if(!QString::compare(name, "3")){
}
else if(!QString::compare(name, "5")){
}
else if(!QString::compare(name, "9")){
}

}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);

dialoginput *input = new dialoginput();

return a.exec();
}

最佳答案

尽管使用 sender() 方法可以解决您的问题,但我不建议您使用它。问题是,信号和槽被设计成将发射器和接收器分开。接收者不需要知道哪些对象,甚至是什么类型的对象可以触发它的插槽。当您使用 sender() 时,您依赖于这样一个事实,即接收方了解触发其插槽的所有对象。如果这在未来发生变化怎么办?

你应该看看QSignalMapper,它是专门为这种需求而设计的。文档中有很好的示例。

关于c++ - 如何获取哪个 QradioButton 调用 SLOT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18199916/

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