Автор: alsav22 (22.04.2012 в 00:34)
VC 2010 Express и qt-win-opensource-4.8.1-vs2010.
Сначала : прописать папку c:\Qt\4.8.1\bin в Path (один раз).
Для каждого проекта:
Свойста проекта, Все конфигурации, C/C++, Общие, Дополнительные каталоги включаемых файлов, добавить:
C:\Qt\4.8.1\include;C:\Qt\4.8.1\include\QtCore;C:\Qt\4.8.1\include\QtGui;C:\Qt\4.8.1\include\ActiveQt
Свойста проекта, Все конфигурации, Компоновщик, Общие, Дополнительные каталоги библиотек, добавить:
C:\Qt\4.8.1\lib
Свойста проекта, Все конфигурации, Компоновщик -> Ввод -> Дополнительные зависимости, добавить:
qtmaind.lib;QtCore4.lib;QtGui4.lib;
Свойста проекта, Все конфигурации, События постороения, Событие перед постороением, Командная строка, добавить: moc -o main.moc main.cpp
Создал проект:
#include <QtGui>
#include <QtCore>
class MainWindow : public QMainWindow
{
public:
explicit MainWindow(QWidget *parent = 0);
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QLabel* label=new QLabel(this);
label->setText("Hello World!");
label->setAlignment(Qt::AlignCenter);
setCentralWidget(label);
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow w;
w.show();
return app.exec();
} |
Всё нормально работает. Если разделить на три файла: заголовочный, с объявлением класса, *.cpp с реализацией класса и *.cpp с функцией main, то компоновщик пишет о неразрешённых внешних символах.
Наверное, это связано с командной строкой, которая запускается перед постороением: moc -o main.moc main.cpp. В ней записан только одни файл: main.cpp. Как сделать, чтобы moc обрабатывал несколько файлов?
Сейчас написал и решил ещё раз проверить. Разделил, приведённый выше код, на три файла и всё нормально построилось. Начал вспоминать, почему перед этим не компоновалось.Вспомнил что я вставлял в объявление класса макрос Q_OBJECT. Если его вставить в приведённый выше код, то компоновщик сообщит о трёх неразрешённых внешних элементах. Если в конце кода написать #include "main.moc", то всё построится нормально. Как сделать, чтобы при трёх файлах и наличии макросов Qt всё нормально строилось?