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

Q_OBJECTマクロを含むファイルをmocで実行し、その出力をコンパイルして、残りのアプリケーションとリンクする必要があります。ビルドシステムに応じて、これは自動的に(qmake)、または1行程度追加することで(cmake)行われます。

于 2013-02-22T22:20:18.527 に答える
0

O_QBJECTマクロを使用して、発生したエラーを修正するには、次のいずれかを実行できます。

1)QWidget / QObject派生クラスを独自の.hファイルで宣言し、独自の.cppファイルで定義します。

2)クラス定義の後にmocによって生成された.mocファイルを.cppに含めます(#include "xxxx.moc"などを追加します)

LE:また、setGeometryを使用してウィジェットをウィンドウに配置する代わりに、レイアウトを使用したい場合は、こちらをご覧ください。

于 2013-02-22T22:20:07.113 に答える