C++ Qt、按钮、id属性?有没有办法知道点击了哪个按钮

C++ Qt、按钮、id属性?有没有办法知道点击了哪个按钮,c++,qt,attributes,C++,Qt,Attributes,我有几个自动添加的按钮。 是否有一种方法可以将“id属性或其他内容”添加到按钮,然后知道单击了哪个按钮?我对每个按钮都有不同的操作。QApplication提供了sender(),其中包含发送信号的对象。因此,您可以: void MainWindow::addRadioToUI() { int button_cunter=4; while(!database.isEmpty()) { button_cunter++;

我有几个自动添加的按钮。
是否有一种方法可以将“id属性或其他内容”添加到按钮,然后知道单击了哪个按钮?我对每个按钮都有不同的操作。

QApplication
提供了
sender()
,其中包含发送信号的对象。因此,您可以:

void MainWindow::addRadioToUI()
{       int button_cunter=4;
        while(!database.isEmpty())
        {       button_cunter++;

                QPushButton *one = new QPushButton("Play: "+name(get_r.getTrackId()));
                one->setIcon(QIcon(":/images/play_button.png"));
                one->setMaximumWidth(140);
                one->setFlat(true);

                QGroupBox* get_rGB = new QGroupBox("somethink"); 
                QFormLayout* layout = new QFormLayout; 
                if(button_cunter%5 == 0){
                    layout->addWidget(one);

                }

                get_rGB->setLayout(layout);
                scrollAreaWidgetContents->layout()->addWidget(get_rGB);

        }
}

对于这种类型的东西来说非常好

您可以这样定义插槽,例如:

//slot, this could also be done in a switch
if(button[X] == QApplication::sender()){
  doX();
}else if(button[Y] == QApplication::sender()){
  doY();
}
然后将
QSignalMapper*
成员添加到类中,并将其连接到该插槽:

public slots:
   void clicked(int buttonId);  // or maybe trackId
addRadioToUI
中,创建按钮后,执行以下操作:

    signalMapper = new QSignalMapper(this);
    connect(signalMapper, SIGNAL(mapped(int)),
            this,         SLOT(clicked(int)));

如果您只需要一个指向触发信号的对象的指针,您可以使用插槽中的静态函数来获取该对象的句柄。

使用QButtonGroup。添加按钮时,它将id作为参数,并在按下组中的按钮时将id提供给插槽。

创建
signalMapper
后,您需要它接收希望它发送的所有信号。您将需要一个调用,如
connect(ui->button_1,SIGNAL(clicked()),signalMapper,SLOT(map())就在创建了
signalMapper
之后,应该对您希望它接收的所有对象重复该代码。
   signalMapper.setMapping(one, button_cunter);
                             // or trackId if that's more practical