新建工程, 选择Qt Widgets Executable类型, 配置Qt Cmake前缀路径.
项目初始目录结构
新建Qt UI Class, 名为MyWidget.
生成的mywidget.cpp文件会编译不过, 需要将大写的ui_MyWidget.h改为ui_mywidget.h, 然后重新编译.
main.cpp使用自己创建的MyWidget组件.
#include <QApplication>
#include "mywidget.h"
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MyWidget w;
w.show();
return QApplication::exec();
}
添加资源文件res.qrc,拷贝图片资源到项目中.
<RCC>
<qresource prefix="/img">
<file>images/11.png</file>
<file>images/22.png</file>
</qresource>
</RCC>
CMakeLists.txt添加资源文件
add_executable(QtHelloWorld main.cpp
mywidget.cpp
mywidget.h
mywidget.ui
res.qrc
)
使用资源文件
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent), ui(new Ui::MyWidget) {
ui->setupUi(this);
ui->label->setPixmap(QPixmap(":/img/images/11.png").scaled(80,80));
connect(ui->pushButton, &QPushButton::clicked, [=](){
ui->label->setPixmap(QPixmap(":/img/images/22.png").scaled(80,80));
});
}
编译运行项目
开发QML
CMakeLists.txt添加Quick模块
cmake_minimum_required(VERSION 3.28)
project(QmlTest)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_PREFIX_PATH "/home/wlzhou/Qt/6.5.3/gcc_64")
find_package(Qt6 COMPONENTS
Core
Gui
Widgets
Quick
REQUIRED)
add_executable(QmlTest main.cpp)
target_link_libraries(QmlTest
Qt::Core
Qt::Gui
Qt::Widgets
Qt::Quick
)
同级目录下创建main.qml文件
import QtQuick
Window {
width: 300
height: 300
visible: true
color: 'green'
}
修改main.cpp文件
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("../main.qml"))); //纯路径加载qml文件
return QApplication::exec();
}
qml项目运行效果
使用 qt_add_qml_module
qt_standard_project_setup(REQUIRES 6)
qt_add_qml_module(QmlTest
URI myUri
VERSION 1.0
QML_FILES
Main.qml //qml文件名必须大写
)
main.cpp 中加载 qml 文件
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QQmlApplicationEngine engine;
engine.loadFromModule("myUri", "Main");
return QApplication::exec();
}
使用资源文件路径加载qml文件
resources.qrc
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource prefix="/qt/qml">
<file>main.qml</file>
</qresource>
</RCC>
CMakeLists.txt加入资源文件
add_executable(untitled main.cpp resources.qrc)
main.cpp
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/qt/qml/main.qml")));
return QApplication::exec();
}
运行效果