Не удалось найти выходной слот и использовать макрос Q_OBJECT - PullRequest
1 голос
/ 06 сентября 2011

Я использую VS2008 с QT 4.7.1 и надстройками. Я новичок в этой среде.
Мне удалось сделать необходимые настройки и запустить простой «привет мир». Но когда я пытаюсь использовать простой quit() слот по нажатию кнопки, мне не удалось. Также это приводит к сбою сборки при попытке использовать Q_OBJECT.
После комментирования Q_OBJECT код создается и отлаживается. Теперь это показывает

QObject :: connect: такой слот QWidget :: quit () in. \ Main.cpp не найден.

ниже мой код

#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 файл для проекта.

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Nitesh: вам нужен макрос Q_OBJECT, чтобы слоты работали правильно, MOC компилирует каждый заголовок, который содержит Q_OBJECT, в файл moc_ * .cpp. Добавьте этот moc * .cpp в ваш проект, и все должно работать нормально. Неразрешенный внешний означает, что вам не хватает определения функции, вы ее где-нибудь определяли?

0 голосов
/ 06 сентября 2011

Переместите объявление Notepad в заголовок (скажем, notepad.h), снова включите Q_OBJECT, затем добавьте в свой .pro файл:

HEADERS += notepad.h

Rerun qmake, тогда оно должно работать.

...