【问题标题】:A slot for multiple buttons多个按钮的插槽
【发布时间】:2013-03-01 08:01:43
【问题描述】:

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

【问题讨论】:

  • 一个简单的解决方案是使用另外两个槽函数:browseButton1ClickHandler(){ button1Clicked(); browseButtonClickHandler();}。但是,我的 qt 技能很差,所以我必须阅读文档才能获得更好的解决方案。
  • 如果需要再创建两个插槽,那么最好为这两个按钮创建两个单独的插槽。我需要将其简化为单个功能。这就是我问的原因。

标签: c++ qt qt4


【解决方案1】:

使用QObject * QObject::sender () 了解信号的来源。

您也可以查看QSignalMapper。在文档中,他们提到了一个与您的问题相同的示例

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

【讨论】:

  • 哇!它对我有用...QObject *sender = QObject::sender (); QMessageBox::information(0, "Button", sender->objectName()); 得到了按钮名称.. 非常感谢!
【解决方案2】:

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

【讨论】:

  • 这是更简洁的方法。再详细一点?
  • 是的。选择这些按钮->右键单击->分配给新的组按钮。然后将 buttonclicked() 信号连接到插槽,例如 connect(ui->commandtype,SIGNAL(buttonClicked(int)),this,SLOT(currentType_response(int)));。完毕! :)
【解决方案3】:

我建议创建一个按钮类的子类,它有一个索引字段和一个给出该索引值的虚函数。 我假设在browseButtonClickHandler() 中你得到了一个指向按钮的指针,所以将它转换为你的按钮子类并获取索引值。

【讨论】:

  • 抱歉,这对我来说不是很清楚,因为我不是 qt 专家。我只是一个初学者。您所说的子类是什么意思,请告诉我该函数如何获取指向按钮的指针?
  • 你创建一个继承自QButton的类,添加一个私有变量(例如int buttonIndex),创建一个构造函数,它除了你想要的其他参数之外还有一个int参数。创建按钮时,必须在构造函数中指定索引。当你执行一个函数,它得到一个像这样的按钮作为参数,你可以得到它的索引,例如使用这样的函数(将其放在继承的类中):int getIndex() { return buttonIndex; }。我假设您将这些按钮放在代码中,而不是 Qt Designer。
猜你喜欢
  • 2020-10-28
  • 2016-01-15
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2017-10-29
  • 1970-01-01
相关资源
最近更新 更多