1

您好,我正在学习 Qt教程,我已经复制了本教程通信部分的代码。代码编译并显示,但我的按钮都不可点击。

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
class QPushButton;
class QLabel;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void OnPlus();
    void OnMinus();
private:
    Ui::MainWindow *ui;
    QLabel *label;
};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QPushButton *plus = new QPushButton("+", this);
    plus->setGeometry(50, 40, 75, 30);

    QPushButton *minus = new QPushButton("-", this);
    minus->setGeometry(50, 100, 75, 30);

    label = new QLabel("0", this);
    label->setGeometry(190, 80, 20, 30);

    connect(plus, SIGNAL(clicked()), this, SLOT(OnPlus()));
    connect(minus, SIGNAL(clicked()), this, SLOT(OnMinus()));

    ui->setupUi(this);
}


void MainWindow::OnPlus()
{
  int val = label->text().toInt();
  val++;
  label->setText(QString::number(val));
}

void MainWindow::OnMinus()
{
  int val = label->text().toInt();
  val--;
  label->setText(QString::number(val));
}


MainWindow::~MainWindow()
{
    delete ui;
    }

主文件

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QPushButton>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow window;
    window.show();

    return app.exec();
}
4

1 回答 1

5

您的问题出在这一行:

ui->setupUi(this);

它为您的主窗口创建了一个不可见的中央小部件,它阻止了所有发往您的按钮的事件,这就是为什么当您单击它们时它们不会被按下的原因。将此行移动到构造函数的开头,MainWindow问题就会消失。

于 2012-09-05T00:24:36.243 回答