一.创建文件和配置CMakeLists
1.创建头文件MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget* parent = nullptr);
~MainWindow();
private:
Ui::MainWindow* ui;
};
#endif // MAINWINDOW_H
2.创建源文件MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
MainWindow::MainWindow(QWidget* parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
3.创建UI文件 MainWindow.ui (我这是空白的)
4.创建demomain.cpp
#include <QApplication>
#include <iostream>
#include "mainwindow.h"
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
std::cout << "in func main" << std::endl;
return app.exec();
}
5.创建CMakeLists.txt
# 项目特定的逻辑。
cmake_minimum_required (VERSION 3.8)
project (QtNodeUI VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) #设置C++标准。该命令将C++标准设置为必选,即在编译C++代码时,必须使用该标准
#set(CMAKE_PREFIX_PATH D:/The_New_Era/work_app/6.7.1/msvc2019_64)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Core Gui)
message("Version :" ${QT_VERSION_MAJOR})
#将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。
include_directories(inc)
#link_directories()
FILE(GLOB_RECURSE SOURCE_FILES inc/*.h src/*.cpp )
# 设置静态库的输出目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
# 设置动态库的输出目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
# 存放可执行软件的目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
message("输出目录"${CMAKE_CURRENT_SOURCE_DIR})
# 将源代码添加到此项目的可执行文件。
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(QtNodeUI
${SOURCE_FILES}
)
elseif(${QT_VERSION_MAJOR} LESS 6)
add_executable(QtNodeUI
${SOURCE_FILES}
)
endif()
target_link_libraries(QtNodeUI PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
#设置目标属性
set_target_properties(QtNodeUI PROPERTIES
WIN32_EXECUTABLE false # 是否存在cmd窗口
)
#https://zhuanlan.zhihu.com/p/630034777
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_finalize_executable(QtNodeUI)
endif()
# TODO: 如有需要,请添加测试并安装目标。
二.使用VS打开并运行
1.我的文件和位置
2.vs打开
可以选择生成的exe文件运行。
三.总结
1.在Qt中创建的CMakeLists.txt文件在vs中是可以不修改直接使用的(vs有Qt插件,没插件时没试过)。如果报错的地方是没找到Qt6xxx.cmake什么的,记得加:set(CMAKE_PREFIX_PATH "C:/Qt/6.5.3/msvc2019_64");路径根据自己的来。
## 1.find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package()找的是.cmake文件,Qt6 的位置是可以通过set(Qt6_DIR "C:/Qt/6.5.3/msvc2019_64/lib/cmake/Qt6")来设置自己的Qt6文件所在的位置。
REQUIRED COMPONENTS 指必须要找到的后面指定的.cmake文件,找不到就报错
来自以下文章