【问题标题】:QPushButton is not clicked on the first click第一次单击时未单击 QPushButton
【发布时间】:2016-08-25 16:51:18
【问题描述】:

我有 Qt 5.6,我正在使用按钮女巫的按下信号,然后显示一个对话框。不幸的是,第一次没有点击对话框按钮,但第二次点击效果很好。 您可以通过在on_someButton_pressed 插槽中显示QMessageBox::information 来测试这种情况。

【问题讨论】:

  • 你连接到什么信号 - clickedpressed
  • 正如我在问题中提到的它的 pressed 信号。
  • 按预期为我工作,按下鼠标按钮时打开对话框......我所做的只是创建一个小部件项目,在设计器中添加一个按钮,然后“转到插槽.. .": void MainWindow::on_pushButton_pressed() { QMessageBox::information(this, "INFO", "Text...", QMessageBox::Ok); }
  • 请发布您的代码,以便我们确定是否存在问题。

标签: qt signals-slots qpushbutton


【解决方案1】:

抱歉,无法复制:适合我。 应该写过这个测试用例。编写代码几乎比描述问题要少。

#include <QtWidgets>
int main(int argc, char ** argv) {
   QApplication app{argc, argv};
   QPushButton button{"Press me"};
   button.setMinimumSize(300, 150);
   button.setFont(QFont{"Helvetica", 20});
   QObject::connect(&button, &QPushButton::pressed, [&]{
       QMessageBox::information(&button, "Yes!", "You pressed me.");
   });
   button.show();
   app.exec();
}

顺便说一句,您应该使用clicked() 信号,而不是pressed() 信号。如果使用后者,可用性会受到影响。

【讨论】:

  • 感谢您的回复。但也许我没有很好地解释情况。问题不是按钮“按钮”本身,而是对话框中的按钮。例如,“QMessageBox”中的 OK 按钮。您应该单击确定按钮两次以关闭信息对话框。再次感谢您的帮助。
  • 你运行上面的测试用例了吗?它工作得很好!
  • 对不起,我在 Windows 中没有任何问题。但是在小猎犬骨黑和触摸屏中,我遇到了这个问题。 Qt 版本 5.6,工具链 linaro 4.9,从 Ubuntu 16.04 交叉编译。我认为第一次没有在 Qt 事件处理程序中处理该事件。
  • 您假设平台首先将事件传递给 Qt。我会将其视为未经证实的假设,除非您有确凿的证据(即您在事件被传递到 Qt 的本机事件处理程序时捕获该事件,然后无法将其跟踪到小部件)。
猜你喜欢
  • 1970-01-01
  • 2018-09-13
  • 2015-06-03
  • 1970-01-01
  • 2018-03-26
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多