如何传递一个值与点击信号从Qt PushButton

How to pass a value with a clicked signal from a Qt PushButton?

本文关键字:信号 PushButton Qt 何传递 一个      更新时间:2023-10-16

我有n个按钮最初都标记为'0'。当程序运行时,这些标签或值将改变为不同的整数,例如在某些时候我可能有:'7','0','2',…

我有一个函数(或槽)接受int作为参数:

void do_stuff(int i);

我想在按下'x'时调用do_stuff(x)。也就是说:当按钮被按下时,用该按钮的值调用do_stuff。我该怎么做呢?到目前为止,我有这样的代码:

std::vector values; // keeps track of the button values
for (int i = 0; i < n; i++){
    values.push_back(0);
    QPushButton* button = new QPushButton("0");
    layout->addWidget(button);
    // next line is nonsense but gives an idea of what I want to do:
    connect(button, SIGNAL(clicked()), SLOT(do_stuff(values[i])));
}

我会将其简化为通常用于解决此类任务的内容:

public slots:
   void do_stuff(); // must be slot

,连接应该是

connect(button, SIGNAL(clicked()), SLOT(do_stuff()));

then MyClass::do_stuff does stuff:

 void MyClass::do_stuff()
 {
     QPushButton* pButton = qobject_cast<QPushButton*>(sender());
     if (pButton) // this is the type we expect
     {
         QString buttonText = pButton->text();
         // recognize buttonText here
     }
 }