测试版本 2019.3
测试版本 Visual Studio 2019 Enterprise
测试版本 Qt5.12.6 msvc2017版
添加编译工具链,选择Visual Studio,会自动识别
根据CLion新建项目向导进行,创建一个CMake项目
示例代码
cmake_minimum_required(VERSION 3.3)
project(App)
set(CMAKE_PREFIX_PATH C:/Qt/5.12.6/msvc2017)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_VERBOSE_MAKEFILE ON)
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
find_package(Qt5Widgets)
add_executable(App main.cpp MyTimer.h)
target_link_libraries(App Qt5::Widgets)
//
// Created by BaiJiFeiLong@gmail.com at 2020/1/7 15:47.
//
#ifndef APP_MYTIMER_H
#define APP_MYTIMER_H
#include <QObject>
#include <QThread>
class MyTimer : public QThread {
Q_OBJECT
protected:
void run() override {
while ("TRUE") {
emit tick();
QThread::msleep(333);
}
}
public:
signals:
void tick();
};
#endif //APP\_MYTIMER\_H
//
// Created by BaiJiFeiLong@gmail.com at 2020/1/7 15:47.
//
#include <QApplication>
#include <MyTimer.h>
#include <QDateTime>
#include <QDebug>
#include <QPushButton>
#include <QLayout>
#include <QListWidget>
int main(int argc, char *argv[]) {
new QApplication(argc, argv);
auto *window = new QWidget();
auto *layout = new QVBoxLayout();
window->setWindowTitle("定时器");
window->setLayout(layout);
auto *button = new QPushButton("启动");
auto *listWidget = new QListWidget();
layout->addWidget(button);
layout->addWidget(listWidget);
window->show();
auto *timer = new MyTimer();
QObject::connect(timer, &MyTimer::tick, [&]() {
listWidget->addItem(new QListWidgetItem(QDateTime::currentDateTime().toString("HH:mm:ss.zzz")));
listWidget->scrollToBottom();
});
QObject::connect(button, &QPushButton::clicked, [&]() {
timer->start();
});
return QApplication::exec();
}
乱就对了,别执着了
在Windows平台下,如果将Qt的bin目录添加到Path环境变量,find_package可以自动找到Qt。否则,需要设置CMAKE_PREFIX_PATH
为Qt的安装目录
Qt程序一般采用动态链接,需要确保程序运行时能找到对应的DLL。可以拷贝所需DLL到工作目录,或者切换工作目录到Qt的bin目录,或者将Qt的bin目录添加到系统Path环境变量(需要重启IDE,确保IDE能加载到最新环境变量)
32位的Qt只能编译32位程序,64位的Qt只能编译64位程序。客户端一般都得支持32位系统,所以直接装32位Qt即可。编译器不管是MSVC还是MINGW,最好直接选择32位,虽然64位编译器可能支持交叉编译到32位,省却配置的麻烦。
pacman -S mingw-w64-i686-toolchain
pacman -S mingw-w64-i686-qt5 --disable-download-timeout
CMake时mingw-w64-i686-qt5-5.12.3-1
报错:
CMake Error at D:/msys64/mingw64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake:15 (message):
The imported target "Qt5::Gui" references the file
"C:/building/msys32/mingw64/x86_64-w64-mingw32/lib/libglu32.a"
将"C:/building/msys32"这个错误的绝对路径改到正确路径即可
直接find_package
即可
程序运行时会自动找到对应的动态链接库,不需额外配置