我對Qt4很熟悉,但我們正在嘗試轉換到Qt5並且它非常困難。我正在嘗試創建一個非常簡單的應用程序,並且使用Qt PRO文件工作,但我們需要將其基於cmake來保持構建服務器的快樂。使用cmake的跨平臺Qt5項目
我得到的錯誤是「在mainwindow.cpp中它構造」ui(new Ui :: MainWindow)「的行中使用了不完整類型'struct Ui :: MainWindow'」。
這裏是我的文件(簡化,以縮短這個帖子):
mainwindow.h
#include <QtWidgets/QMainWindow>
namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
mainwindow.cpp
#include "mainwindow.h"
#include "moc_mainwindow.cpp"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{ }
MainWindow::~MainWindow()
{ delete ui; }
的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9 FATAL_ERROR)
PROJECT(Test)
set(CMAKE_AUTOMOC TRUE)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Core REQUIRED)
find_package(Qt5Widgets REQUIRED)
file (GLOB Sources src/*.cpp)
add_executable(Test ${Sources} src/mainwindow.ui)
qt5_use_modules(Test Widgets)
我確定我在想你摹東西很明顯,但我一直在尋找了一整天,不知道這一個了...
縱觀產生moc_mainwindow.cpp(再次,一些線路截斷,以保持這個職位短):
#include "../src/mainwindow.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
QT_BEGIN_MOC_NAMESPACE
void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
Q_UNUSED(_o);
Q_UNUSED(_id);
Q_UNUSED(_c);
Q_UNUSED(_a);
}
QT_END_MOC_NAMESPACE
我猜測MainWindow :: qt_static_metacall()是在我的mainwindow.h中的Q_OBJECT宏中聲明的。這意味着我不知道這個神祕的Ui :: MainWindow來自哪裏。或不。
UPDATE
的問題似乎是,在我的mainwindow.cpp,我要#包括「ui_mainwindow.h」而不是「moc_mainwindow.cpp」,但沒有產生「ui_mainwindow.h」 ,只有moc_mainwindow.cpp。