Qt PushButton + clicked () не всегда выполняется - PullRequest
0 голосов
/ 07 июня 2018

После нескольких часов отладки и поиска ответа в Интернете, я немного в отчаянии.Это мой первый небольшой проект на Qt, и я пытаюсь сделать следующее: я хочу создать небольшую вычислительную игру.Выглядит это так: Приложение до первого нажатия После нажатия «Проверить / Создать» должно быть следующее изменение: Приложение после первого нажатия

Но частоЯ должен нажать на эту кнопку несколько раз, чтобы вызвать ее.Кнопка «Выйти» работает отлично, поэтому это не является общей проблемой, но, вероятно, дерьмовое кодирование с моей стороны.

Вот мой код, надеюсь, у вас есть несколько подсказок:

(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;
}

Кроме того, при дальнейшем использовании этого приложения, при отправке результатов, эта кнопка не выполняется должным образом каждый раз.У меня действительно нет больше идей для дальнейшей отладки.

1 Ответ

0 голосов
/ 07 июня 2018

Иногда, когда вы изменяете объекты, «созданные» непосредственно в Ui, функции не работают должным образом.Чтобы проверить, так ли это, поместите qDebug("here"); в начале вашей функции SLOT.Если отладка запущена, соединение не является проблемой, то самым быстрым решением было бы создание элемента Ui в объекте MainWindow.

...