crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Q_OBJECT, moc
AD
  опции профиля:
сообщение 15.4.2008, 16:09
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Вопрос такой. При разработке нового класса диалогового окна выдает подобные ошибки, если я использую макрос Q_OBJECT:
1>LINK : ..\..\Bin\Debug\TransasLogViewer\TLV.exe not found or not built by the last incremental link; performing full link
1>GraphicDisplay.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall GraphicDisplay::metaObject(void)const " (?metaObject@GraphicDisplay@@UBEPBUQMetaObject@@XZ)
1>GraphicDisplay.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall GraphicDisplay::qt_metacast(char const *)" (?qt_metacast@GraphicDisplay@@UAEPAXPBD@Z)
1>GraphicDisplay.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall GraphicDisplay::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GraphicDisplay@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>..\..\Bin\Debug\TransasLogViewer\TLV.exe : fatal error LNK1120: 3 unresolved externals
1>Build log was saved at "file://d:\Projects\Win32\Obj\Debug\TransasLogViewer\BuildLog.htm"
1>TLV - 4 error(s), 2 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.4.2008, 16:15
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


класс содержащий макрос Q_OBJECT, должен быть в отдельном, от функции main, файле, либо нужно в конце файла приинклюдить MOC'ий заголовочный файл, но я так не пробывал.

Иногда помогает очистить все генерируемые файлы и повторно воспользоваться qmake.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.4.2008, 16:45
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 15.4.2008, 17:15) *
класс содержащий макрос Q_OBJECT, должен быть в отдельном, от функции main, файле, либо нужно в конце файла приинклюдить MOC'ий заголовочный файл, но я так не пробывал.

Иногда помогает очистить все генерируемые файлы и повторно воспользоваться qmake.

А какой moc-й заголовочный файл нужен? Пересобрать попытался, не помогло!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.4.2008, 17:01
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


если все делаешь в одном файле, например main.cpp,
то нужно воткнуть такую строку:
#include "main.moc"

я в стречал ее в конце файла, это у Шлее, и перед функцией main, это у Тролей
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.4.2008, 17:07
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


вот у Макса пример
CODE

/* ======================================================================
** main.cpp
** ======================================================================
**
** ======================================================================
** Copyright © 2007 by Max Schlee
** ======================================================================
*/

#include <QtGui>

// ======================================================================
class MyThread : public QThread {
Q_OBJECT
private:
int m_nValue;

public:
MyThread() : m_nValue(10)
{
}

void run()
{
QTimer timer;
connect(&timer, SIGNAL(timeout()), SLOT(slotNextValue()));
timer.start(1000);

exec();
}

signals:
void finished ( );
void currentValue(int);

public slots:
void slotNextValue()
{
emit currentValue(--m_nValue);

if (!m_nValue) {
emit finished();
}

}
};

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QLCDNumber lcd;
MyThread thread;

QObject::connect(&thread, SIGNAL(currentValue(int)),
&lcd, SLOT(display(int))
);
QObject::connect(&thread, SIGNAL(finished()),
&app, SLOT(quit())
);

lcd.setSegmentStyle(QLCDNumber::Filled);
lcd.display(10);
lcd.resize(220, 90);
lcd.show();
thread.start();

return app.exec();
}

#include "main.moc"

Файл проекта, без особенностей:
TEMPLATE     = app
SOURCES         = main.cpp
win32:TARGET = ../ThreadTimer
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.4.2008, 17:16
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 15.4.2008, 18:01) *
если все делаешь в одном файле, например main.cpp,
то нужно воткнуть такую строку:
#include "main.moc"

я в стречал ее в конце файла, это у Шлее, и перед функцией main, это у Тролей

Файлы разные!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.4.2008, 17:31
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


т.е. макрос в файле main.cpp отсутствует и такую ошибку дает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.4.2008, 17:37
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 15.4.2008, 18:31) *
т.е. макрос в файле main.cpp отсутствует и такую ошибку дает?

в файле main.cpp макроса Q_OBJECT нету! Но есть в файле GraphicDisplay.h
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.4.2008, 17:42
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


попробуй makefile по новой сделать, если ты им пользуешся.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.4.2008, 17:47
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 15.4.2008, 18:42) *
попробуй makefile по новой сделать, если ты им пользуешся.

Так я ведь студией компилирую.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 14:56