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);
}
}
Run Code Online (Sandbox Code Playgroud)
我有几个自动添加的QPushButtons.有没有办法在按钮上添加"id属性或者其他",然后知道点击了哪个按钮?我对每个按钮都有不同的动作.
QApplication
提供sender()
包含哪个对象发送信号的商品.所以你可以这样做:
//slot, this could also be done in a switch
if(button[X] == QApplication::sender()){
doX();
}else if(button[Y] == QApplication::sender()){
doY();
}
Run Code Online (Sandbox Code Playgroud)
http://doc.qt.io/qt-4.8/qobject.html#sender
QSignalMapper
对于这类事情来说非常好.
你可以像这样定义你的插槽:
public slots:
void clicked(int buttonId); // or maybe trackId
Run Code Online (Sandbox Code Playgroud)
然后将一个QSignalMapper*
成员添加到您的类并将其连接到该插槽:
signalMapper = new QSignalMapper(this);
connect(signalMapper, SIGNAL(mapped(int)),
this, SLOT(clicked(int)));
Run Code Online (Sandbox Code Playgroud)
在addRadioToUI
创建按钮后,执行:
signalMapper.setMapping(one, button_cunter);
// or trackId if that's more practical
Run Code Online (Sandbox Code Playgroud)
如果你需要的只是指向触发信号的对象的指针,你可以使用QOjbect::sender
插槽中的静态函数来获取它的句柄.
归档时间: |
|
查看次数: |
6669 次 |
最近记录: |