0

我在 Qt 中编写了一个程序,它工作正常,但单击按钮不起作用。当我在类声明之后使用 Q_OBJECT 时,它给了我编译错误。

这是我的代码:

    #include <QApplication>
    #include <QPushButton>
    #include <QLabel>
    #include <QWidget>

    class Communicate : public QWidget
    {
     // Q_OBJECT

      public:
        Communicate(QWidget *parent = 0);

      private slots:
        void OnPlus();
        void OnMinus();

      private:
        QLabel *label;

    };

    Communicate::Communicate(QWidget *parent)
        : QWidget(parent)
    {
      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()));
    }

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

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

    int main(int argc, char *argv[])
    {
      QApplication app(argc, argv);

      Communicate window;

      window.setWindowTitle("Communicate");
      window.show();

      return app.exec();
    }
4

2 回答 2

1

您需要通过 moc 运行包含 Q_OBJECT 宏的文件,并编译并将其输出与其余应用程序链接在一起。根据您的构建系统,这会自动发生(qmake)或添加一行左右(cmake)

于 2013-02-22T22:20:18.527 回答
0

使用 O_QBJECT 宏并纠正您得到的错误,您可以:

1) 在它自己的 .h 文件中声明您的 QWidget/QObject 派生类,并在它自己的 .cpp 文件中定义它。

2)在你拥有的.cpp中包含你的类定义之后由moc生成的.moc文件(添加类似#include“xxxx.moc”的东西)

LE:您还想使用布局而不是使用 setGeometry 将小部件放置到窗口中,请在此处阅读更多信息

于 2013-02-22T22:20:07.113 回答