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();
}
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 в слот при нажатии кнопки в группе.