Qt, кнопка, атрибут id? Любой способ узнать, какая кнопка была нажата

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);

        }
}

У меня есть несколько кнопок QPushButtons, которые добавляются автоматически. Есть ли способ добавить "атрибут id или sth else" к кнопке и затем узнать, какая кнопка была нажата? У меня есть разные действия для каждой кнопки.

3 ответов


QApplication предложения sender(), который содержит объект отправил сигнал. Так что вы можете сделать:

//slot, this could also be done in a switch
if(button[X] == QApplication::sender()){
  doX();
}else if(button[Y] == QApplication::sender()){
  doY();
}

http://doc.qt.io/qt-4.8/qobject.html#sender


QSignalMapper довольно хорошо для такого типа вещей.

вы бы определили свой слот так, например:

public slots:
   void clicked(int buttonId);  // or maybe trackId

добавить QSignalMapper* член вашего класса и подключите его к этому слоту:

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

на addRadioToUI, после создания кнопки, делаем:

   signalMapper.setMapping(one, button_cunter);
                             // or trackId if that's more practical

если все, что вам нужно, это указатель на объект, который вызвал сигнал, вы можете использовать статический QOjbect::sender функция в вашем слоте чтобы разобраться с этим.


Используйте QButtonGroup. Он принимает id в качестве параметра при добавлении кнопки и предоставляет id в слот при нажатии кнопки в группе.