Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: alsav22   (22.04.2012 в 13:27)
Если сделать так:
файл mainwindow.h:
#include <QtGui>
#include <QtCore>
#include <QObject>

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
};


файл main.cpp:
#include "mainwindow.h"

int main(int argc, char **argv)
 {
QApplication app(argc, argv);
MainWindow w;
w.show();
return app.exec();
 }


файл mainwindow.cpp:
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    QLabel* label=new QLabel(this);
label->setText("Hello World!");
label->setAlignment(Qt::AlignCenter);
setCentralWidget(label);
}


то при построении:
1>------ Построение начато: проект: Qt5, Конфигурация: Debug Win32 ------
1>  main.cpp(0): Note: No relevant classes found. No output generated.
1>  main.cpp
1>  Создание кода...
1>  Компиляция...
1>  mainwindow.cpp
1>  Создание кода...
1>  LINK : не найден или не выполнена сборка D:\MY C++Projects\Qt5\Debug\Qt5.exe при последней инкрементной компоновке; выполняется полная компоновка
1>mainwindow.obj : error LNK2001: неразрешенный внешний символ ""publicvirtual struct QMetaObject const * __thiscall MainWindow::metaObject(void)const " (?metaObject@MainWindow@@UBEPBUQMetaObject@@XZ)"
1>mainwindow.obj : error LNK2001: неразрешенный внешний символ ""publicvirtual void * __thiscall MainWindow::qt_metacast(char const *)" (?qt_metacast@MainWindow@@UAEPAXPBD@Z)"
1>mainwindow.obj : error LNK2001: неразрешенный внешний символ ""publicvirtual int __thiscall MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z)"
1>D:\MY C++Projects\Qt5\Debug\Qt5.exe : fatal error LNK1120: 3 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Если убрать Q_OBJECT, то всё нормально. То же самое выдаёт и в случае, если весь код поместить в один файл main.cpp, но это решается написанием в конце кода строки: #include "main.moc" . При трёх файлах это не помогает.

>Попробуйте для начала просто прописать строки
>
moc -o main.moc main.cpp

>для каждого cpp-файла ...

Как это должно выглядеть? Две строки:
-o main.moc main.cpp
-o main.moc mainwindow.cpp
? Или как-то по другому?


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: