Russian Qt Forum
Май 15, 2024, 10:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка при указании макроса Q_OBJECT  (Прочитано 7055 раз)
Alex_cs_gsp
Гость
« : Сентябрь 15, 2010, 17:19 »

Изучаю события, вот играясь наткнулся на ошибку, которая происходит если раскомменитровать  //Q_OBJECT Непонимающий

Код:
#include <QApplication>
#include <QtGui>

class CSpyLineEdit : virtual public QLineEdit
{
    //Q_OBJECT

public:
    CSpyLineEdit(QWidget *parent = 0):QLineEdit(parent){}

protected:
    void keyPressEvent(QKeyEvent *pKeyEvent)
    {
        if (pKeyEvent->key()==Qt::Key_0 && pKeyEvent->modifiers()==Qt::AltModifier)
        {
            this->setText("Clear complete");
        }

        else
        {
            QLineEdit::keyPressEvent(pKeyEvent);
        }
    }
};


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

    QApplication app(argc, argv);

    QWidget wgt;

    QVBoxLayout *pVboxLayout = new QVBoxLayout();

    CSpyLineEdit *pSpyLineEdit = new CSpyLineEdit();
    pSpyLineEdit->setMinimumSize(QSize(200,100));
    pVboxLayout->addWidget(pSpyLineEdit);

    pVboxLayout->setMargin(20);
    wgt.setLayout(pVboxLayout);
    wgt.show();

   return app.exec();
}


//Compile output
mingw32-make: Leaving directory `D:/QT/MyModel/MyModel'
debug/main.o: In function `CSpyLineEdit':
D:\QT\MyModel\MyModel/../main.cpp:11: undefined reference to `vtable for CSpyLineEdit'
D:\QT\MyModel\MyModel/../main.cpp:11: undefined reference to `vtable for CSpyLineEdit'
D:\QT\MyModel\MyModel/../main.cpp:11: undefined reference to `vtable for CSpyLineEdit'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\MyModel.exe] Error 1
mingw32-make: *** [debug] Error 2
Exited with code 2.
Error while building project MyModel
When executing build step 'Make'



Build issues:
D:\QT\MyModel\MyModel/../main.cpp:11: undefined reference to `vtable for CSpyLineEdit'
:-1: error: collect2: ld returned 1 exit status



Записан
BRE
Гость
« Ответ #1 : Сентябрь 15, 2010, 17:28 »

В конец своего файла добавь:
#include "main.moc"

Выполни:
qmake
make

За подробностями в поиск и документацию.  Улыбающийся
Записан
Alex_cs_gsp
Гость
« Ответ #2 : Сентябрь 15, 2010, 20:35 »

Помогло. А чё раньше я такой проблемы не замечал? Можно ответ по-подробнее пожалуйста, или ссылку. И без макроса Q_OBJECT все работает как нужно. Просто в Шлеевской книге говорится, что напрямую подключать #include "main.moc"  не годится (стр.69). Спасибо.
« Последнее редактирование: Сентябрь 15, 2010, 20:46 от Alex_cs_gsp » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Сентябрь 15, 2010, 21:09 »

qmake просматривает h-файлы, чтобы дать задания для moc'а. А в cpp-файлах он не ищет объявления класса.

Т.е. если ты класс объявляешь в cpp-файле, то должен руками инклюд написать. Если же объявление и реализация разнесены по h/cpp файлам. То qmake сам справится.
Записан

Юра.
Alex_cs_gsp
Гость
« Ответ #4 : Сентябрь 15, 2010, 21:17 »

Спасибо Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.079 секунд. Запросов: 22.