Qt PushButton + clicked() 并不总是执行

Qt PushButton + clicked() not always executing

本文关键字:执行 PushButton clicked Qt      更新时间:2023-10-16

经过数小时的调试和在网络上寻找答案,我有点绝望。这是我的第一个小型Qt项目,我尝试做的事情如下: 我想做一个小计算游戏。它看起来像这样: 首次点击前的应用程序 单击"检查/新建"后,应更改以下内容:首次单击后的应用程序

但通常我必须多次单击该按钮才能触发它。"退出"按钮工作得很好,所以它似乎不是一个普遍的问题,但可能是我这边的糟糕编码。

这是我的代码,希望你有一些提示:

(1( 主窗口。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
int a, b, result;
private slots:
void CmdCheckNewClicked();
};
#endif // MAINWINDOW_H

(2( 主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <ctime>
void MainWindow::CmdCheckNewClicked() {
if(result != -1) {
int eingabe = ui->EdtInput->text().toInt();
QString comment;
if(eingabe==result) {
comment = "Right";
} else {
comment = "Wrong";
}
comment += QString(": %1 + %2 = %3").arg(a).arg(b).arg(result);
ui->LblComment->setText(comment);
ui->EdtInput->setText("");
}
a = rand() % 20 + 20;
b = rand() % 20 + 20;
result = a + b;
QString task = QString("%1 + %2").arg(a).arg(b);
ui->LblTask->setText(task);
ui->EdtInput->setFocus();
}
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
ui(new Ui::MainWindow) {
ui->setupUi(this);
srand((unsigned)time(NULL));
connect(ui->CmdCheckNew, SIGNAL(clicked()),
SLOT(CmdCheckNewClicked()));
connect(ui->CmdQuit, SIGNAL(clicked()), SLOT(close()));
}
MainWindow::~MainWindow() {
delete ui;
}

同样在该应用程序的进一步使用过程中,在提交结果期间,该 PushButton 每次都无法正确执行。我真的没有更多进一步调试的想法。

有时,当您直接在 Ui 中更改"创建"的对象时,函数无法正常工作。要检查是否属于这种情况,请在 SLOT 函数的开头放置一个qDebug("here");。如果触发了调试,则连接不是问题,那么最快的解决方案是在 MainWindow 对象中创建 Ui 元素。