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 元素。
经过几个小时的调试和在网上搜索答案,我有点绝望。这是我的第一个小型 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 元素。