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

Qt PushButton + clicked() not always executing

经过几个小时的调试和在网上搜索答案,我有点绝望。这是我的第一个小型 Qt 项目,我尝试做的是: 我想构建一个小计算游戏。它看起来像这样: Application before first click 单击 "Check / New" 后,应更改以下内容:Application after first click

但我经常不得不多次点击那个按钮,才能触发它。 "Quit" 按钮工作得很好,所以它似乎不是一个普遍的问题,但可能是我这边的糟糕编码。

这是我的代码,希望你能得到一些提示:

(1) mainwindow.h

#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) mainwindow.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;
}

同样,在该应用程序的进一步使用过程中,在提交结果期间,该按钮并非每次都正确执行。实在是想不出更多的调试思路了

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