【问题标题】:QDialog: need pressed button or return valueQDialog:需要按下按钮或返回值
【发布时间】:2017-03-10 09:28:31
【问题描述】:

我正在寻找一种从 QDialog 小部件中获取按下按钮的简单方法。 (所有按钮在按下事件后完成对话框,许多按钮)。这样:

MyDialog *ptrMyDialog = new MyDialog;
ptrMyDialog->exec(); // blocked til finished 
// ??? 
QAbstractButton * btn = ptrMyDialog->Function_I_Need();
// or. I only need a spezific return value, set by button. e.g
auto retValIneed= ptrMyDialog->exec();

任何提示都会有所帮助

问候拉尔斯

【问题讨论】:

标签: c++ qt


【解决方案1】:

QDialog exec() 已经返回对话框是accepted 还是rejected。如果这两者之间的区别不够,因为您已经有一个自定义类,您可以轻松地自己实现这种行为。

任何按钮都已经调用了关闭对话框的函数之一,因此您可以简单地将哪个按钮存储在类的成员中,并使用您想要的方法检索该值。

另一种可能性是重载exec(),在其中调用基类实现并返回您的自定义成员,该成员直接存储按下的按钮。

【讨论】:

  • 您好,谢谢。我重载了 exec() 方法。它现在可以工作了。
【解决方案2】:

在处理 MyDialog 中的按钮时,您将调用 setResult(int r) 方法,然后 result() 将为您提供相应的值(可能还有 exec() )。有关如何完成此操作的详细信息,您可以检查 QMessageBox 实现,因为 exec() 返回实际的按钮 ID。

【讨论】:

  • 您好,谢谢。我尝试了 setResult/result 机制但没有成功。我应该如何关闭按钮处理程序中的对话框。我试过 setResult/close ;设置结果/完成;设置结果/完成。似乎只有状态 0 和 1
  • QMessageBox 中将一个按钮 ID 传递给 setResult,请参阅 qmessagebox.cpp:1356,您可能应该做类似的事情。
猜你喜欢
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多