Почему я получаю два щелчка или выпущенные сигналы при использовании пользовательского слота для Qpushbutton?

StackOverflow https://stackoverflow.com/questions/2474561

  •  21-09-2019
  •  | 
  •  

Вопрос

Сначала я подумал, что это основной код, это окно сообщений, но настройка метки вместо этого имеет тот же эффект.

#include <time.h>
#include "ui_mainwindow.h"
#include <QMessageBox>


class MainWindow : public QWidget, private Ui::MainWindow {
    Q_OBJECT
    public:
        MainWindow(QWidget *parent = 0);
        void makeSum(void);
    private:
        int r1;
        int r2;
    private slots:
        void on_pushButton_released(void);
};

MainWindow::MainWindow(QWidget *parent) : QWidget(parent) {
    setupUi(this);
}

void MainWindow::on_pushButton_released(void) {
    bool ok;
    int a = lineEdit->text().toInt(&ok, 10);

    if (ok) {  
        if (r1+r2==a) {
            QMessageBox::information( this, "Sums","Correct!" ); 
        } else {
            QMessageBox::information( this, "Sums","Wrong!" ); 
        }
    } else {
        QMessageBox::information( this, "Sums","You need to enter a number" ); 
    }
    makeSum();
}

void MainWindow::makeSum(void) {
    r1 = rand() % 10 + 1;
    r2 = rand() % 10 + 1;
    label->setText(QString::number(r1));
    label_3->setText(QString::number(r2));
}

int main(int argc, char *argv[]) {
    srand ( time(NULL) );
    QApplication app(argc, argv);
    MainWindow mw;
    mw.makeSum();
    mw.show();
    return app.exec();
}

#include "main.moc"
Это было полезно?

Решение

Поведение, которое вы описали, обычно означает, что между одним и тем же сигналом и слотом есть два подключения. Убедитесь, что "qmetaObject :: ConnectSlotsByName (MainWindow);" Сгенерированный в setupui () является единственным подключением между сигналом () и вашим пользовательским слотом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top