Qt、PushButton、id 属性?任何知道点击了哪个按钮的方法
Posted
技术标签:
【中文标题】Qt、PushButton、id 属性?任何知道点击了哪个按钮的方法【英文标题】:Qt, PushButton, id attribute? Any way to know which button was clicked 【发布时间】:2012-01-01 10:47:03 【问题描述】: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 属性或其他”添加到按钮,然后知道单击了哪个按钮?我对每个按钮都有不同的操作。
【问题讨论】:
【参考方案1】: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
【讨论】:
【参考方案2】: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
函数来获取它的句柄。
【讨论】:
signalMapper
创建后,您需要它接收您希望它汇出的所有信号。在创建signalMapper
之后,您将需要像connect(ui->pushButton_1, SIGNAL(clicked()), signalMapper, SLOT(map()) );
这样的调用,并且应该为您希望它接收的所有对象重复调用。【参考方案3】:
使用 QButtonGroup。添加按钮时将 id 作为参数,并在按下组中的按钮时将 id 提供给插槽。
【讨论】:
以上是关于Qt、PushButton、id 属性?任何知道点击了哪个按钮的方法的主要内容,如果未能解决你的问题,请参考以下文章
Qt designer中如何指定pushButton的大小,比如多少*多少像素
QT中让按钮上显示图片,就是让按钮更好看点,有没有简单点可靠的的方法
QT textEdit里面有一段文本文字,在lineEdit输入一串字符串,点击一下pushbutton,在一个groupBox显示数量