2013-03-01 25 views
1

我的应用程序中有两个浏览按钮。 我需要为这两个按钮执行功能browseButtonClickHandler()。 但问题是,我怎样才能识别哪个按钮被点击? 我需要将浏览过的文件夹粘贴到文本字段。 通过ui编辑器创建信号和插槽。 我已经为这两个工作分配了它的功能。 但唯一的困难是识别按钮。 请帮助我。多个按钮的插槽

+0

一个不重要的解决方案是使用两个以上槽的功能:'browseButton1ClickHandler(){button1Clicked(); browseButtonClickHandler();}'。但是,我的qt技巧非常糟糕,所以我必须阅读文档以获得更好的解决方案。 – Zeta 2013-03-01 08:06:31

+0

如果需要创建两个更多的插槽,那么最好为这两个按钮创建两个单独的插槽。我需要将其简化为单一功能。这就是为什么我问。 – 2013-03-01 08:10:03

回答

3

使用QObject * QObject::sender()来知道信号源自何处。您可以查看QSignalMapper。在该文献中,它们都提到相同的例子作为问题

http://doc.qt.digia.com/4.6/qsignalmapper.html#details

+0

哇! 它为我工作... 'QObject * sender = QObject :: sender(); QMessageBox :: information(0,“Button”,sender-> objectName());' 得到按钮名称.. 非常感谢! – 2013-03-01 09:26:30

0

我会建议创建一个按钮类的子类,它有一个索引字段和一个赋予此索引值的虚函数。 我假设在browseButtonClickHandler()你得到一个指向按钮的指针,所以把它转换到你的按钮子类并获得索引值。

+0

对不起,我不清楚,因为我不是qt专家。我只是一个初学者。你的子类是什么意思,请告诉我函数如何获得指向按钮的指针? – 2013-03-01 08:15:23

+0

你创建一个从'QButton'继承的类,添加一个私有变量(例如'int buttonIndex'),创建一个具有int参数的构造函数。当你创建按钮时,你必须在构造函数中指定索引。当你执行一个获得这样的按钮作为参数的函数时,你可以得到它的索引,例如用这样的函数(把它放在继承的类中):int getIndex(){return buttonIndex; }'。我假设你将这些按钮与代码放在一起,而不是用Qt Designer。 – Gandras 2013-03-01 09:25:24

2

使用QButtonGroup。也许这个链接可以帮助。
http://doc.qt.io/qt-4.8/qbuttongroup.html#id

+0

这是更清洁的方式。详细阐述一下? – UmNyobe 2013-03-01 08:42:46

+0

是的,是的。选择这些按钮 - >右键单击 - >分配到一个新的组按钮。然后将buttonclicked()信号连接到插槽,例如connect(ui-> commandtype,SIGNAL(buttonClicked(int)),this,SLOT(currentType_response(int)));.完成了! :) – emylia87 2013-03-01 09:07:42