1

QT4.7.1とアドインでVS2008を使用しています。私はこの環境に不慣れです。
必要な設定を行い、簡単な「helloworld」を実行することができました。しかし quit()、ボタンをクリックするだけで単純なスロットを使おうとすると失敗しました。また、を使用しようとするとビルドが失敗しますQ_OBJECT
コメントした後Q_OBJECT、コードがビルドされ、デバッグされます。今それは示しています

QObject :: connect:。\main.cppにそのようなスロットQWidget:: quit()が見つかりません。

以下は私のコードです

#include <QtGui>
#include "QtGui\QApplication"
#include "QObject"


class Notepad : public QWidget
{
    //Q_OBJECT 
public:
    Notepad();
    private slots:
        void quit();

private:
    QTextEdit *textEdit;
    QPushButton *quitButton;
}; 

Notepad::Notepad()
{
    textEdit = new QTextEdit;
    quitButton = new QPushButton(tr("Quit"));
    connect(quitButton, SIGNAL(clicked()), this, SLOT(quit() ));
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(textEdit);
    layout->addWidget(quitButton);

    setLayout(layout);

    setWindowTitle(tr("Notepad"));
}


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

    Notepad nt;// = new Notepad();
    nt.show();

    return a.exec();
}

ネットで検索しましたが、妥当な解決策が得られませんでした。ほとんどのソリューションは、コマンドラインでqmakeを操作するためのものです。また、プロジェクトの.proファイルを見つけることができます。

どんな助けでも大歓迎です。

4

2 に答える 2

1

Nitesh:スロットが正しく機能するにはQ_OBJECTマクロが必要です。MOCはQ_OBJECTを含むすべてのヘッダーをmoc_ *にコンパイルします。.cppファイル。そのmoc * .cppをプロジェクトに追加すると、すべてが正常に機能するはずです。未解決の外部は、関数の定義が欠落していることを意味しますが、どこかで定義しましたか?

于 2011-09-06T12:52:06.760 に答える
0

メモ帳の宣言をヘッダー(たとえば、notepad.h)に移動し、Q_OBJECTを再度有効にしてから、.proファイルに追加します。

HEADERS += notepad.h

qmakeを再実行すると、動作するはずです。

于 2011-09-06T05:27:53.063 に答える