clion+msvc+qml demo

news/2024/10/5 1:23:58

CMake设置-DCMAKE_PREFIX_PATH=C:\Qt\6.6.2\msvc2019_64

demo工程结构:

├───CMakeLists.txt
└───main.cpp
└───Main.qml
└───MyObject.cpp
└───MyObject.h
└───MyRectangle.qml

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)project(qmltest02 VERSION 0.1 LANGUAGES CXX)set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(Qt6 6.5 REQUIRED COMPONENTS Quick)qt_standard_project_setup(REQUIRES 6.5)qt_add_executable(appqmltest02main.cppMyObject.cppMyObject.h
)qt_add_qml_module(appqmltest02URI qmltest02VERSION 1.0QML_FILES Main.qmlQML_FILES MyRectangle.qml
)# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
set_target_properties(appqmltest02 PROPERTIES
#    MACOSX_BUNDLE_GUI_IDENTIFIER com.example.appqmltest02MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}MACOSX_BUNDLE TRUEWIN32_EXECUTABLE TRUE
)target_link_libraries(appqmltest02PRIVATE Qt6::Quick
)include(GNUInstallDirs)
install(TARGETS appqmltest02BUNDLE DESTINATION .LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "MyObject.h"int main(int argc, char *argv[])
{QGuiApplication app(argc, argv);QQmlApplicationEngine engine;/* 将自定义 C++ 类型注册到 QML 中的函数*/// 参数: 导入的模块名(约等于头文件), 主版本号,次版本号,组件名(约等于类名)qmlRegisterType<MyObject>("MyObj", 1, 0, "MyObject");QObject::connect(&engine,&QQmlApplicationEngine::objectCreationFailed,&app,[]() { QCoreApplication::exit(-1); },Qt::QueuedConnection);engine.loadFromModule("qmltest02", "Main");return app.exec();
}

Main.qml

import QtQuick
import MyObj 1.0
import QtQuick.ControlsWindow {width: 640height: 480visible: truetitle: qsTr("Hello qml")MyObject {// 约等于组件对象名(class变量对象名)id: myobjstr: "hahahah"value: 10// 约等于构造函数Component.onCompleted: {console.log(value, str)}}// 列布局Column {// 行布局Row {spacing: 2Rectangle {id: r1color: "red"height: 100width: 200}MyRectangle {x: r1.width + 20}Text {id: text01text: qsTr("text")font.pixelSize: 30}}Button {id: btn1width: 50height: 50text: "btn1"// 自定义属性并赋值property string tx: myobj.stronClicked: {console.log("btn1 被点击")text01.text = tx + myobj.valuemyobj.func();}}}
}

MyRectangle.qml

import QtQuickRectangle {id: r2property int aa: 1color: "blue"height: 100width: 200
}

MyObject.h

//
// Created by Dark on 24-4-28.
//#pragma once#include <QObject>class MyObject : public QObject
{Q_OBJECTpublic:explicit MyObject(QObject *parent = nullptr);int value() const;void setValue(int newValue);QString str() const;void setStr(const QString &newStr);// 声明Q_INVOKABLE, 可以让func给qml调用Q_INVOKABLE void func();signals:void valueChanged();void strChanged();private:int m_value;QString m_str;Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged FINAL)Q_PROPERTY(QString str READ str WRITE setStr NOTIFY strChanged FINAL)
};

MyObject.cpp

//
// Created by Dark on 24-4-28.
//#include "MyObject.h"#include <QDebug>MyObject::MyObject(QObject *parent) : QObject(parent) {}int MyObject::value() const
{return m_value;
}void MyObject::setValue(int newValue)
{if (m_value == newValue)return;m_value = newValue;emit valueChanged();
}QString MyObject::str() const
{return m_str;
}void MyObject::setStr(const QString &newStr)
{if (m_str == newStr)return;m_str = newStr;emit strChanged();
}void MyObject::func()
{qDebug() << "MyObject::func";m_value += 10;
}

编译后,执行windeployqt把需要的dll拷贝到exe的目录,运行

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44144.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

推荐 | 诺奖得主传记《解码者:珍妮弗杜德纳基因编辑的历史与未来》

今天小编给大家推荐一本关于基因编辑的科普故事书。此书曾入选中信出版2022年度好书,豆瓣读书评分也高达8.7分,值得一阅。此书作者沃尔特艾萨克森(Walter Isaacson)是美国知名传记作家,杜兰大学历史学教授,《时代周刊》前主编,CNN前董事长兼首席执行官。其他畅销传记作品…

推荐 | 入门书籍《生物信息学》(第四版),含PDF和PPT

《生物信息学》联合国内高校学者,紧密跟踪学科发展,提炼学科精华,编写完成。全书涵盖了生物信息学、系统生物学、合成生物学的相关内容,以及应用于第二代测序技术的相关软件和算法。第一、二、三版出版以来,越来越多的高校将其作为首选专业教材或选修教材。作为科学出版社…

利用基于 Yolo 技术进行植物检测和计数

这篇论文介绍了一种使用YOLO算法进行植物检测和计数的技术,旨在为农业实践提供一种自动化、有效的解决方案。作者通过收集大量的农田照片,并对每张照片中的植物实例进行精确的边界框标注,训练了这个算法。YOLO算法以其实时物体检测能力而闻名,在图像中将输入图像划分为网格…

JIPB | 中国农科院华南农大王海洋等综述玉米响应密植的遗传调控分子机制

现代玉米育种中,提高品种耐密性和种植密度是提高玉米单产的关键措施。玉米密植后群体通风、透光性降低,会引起避荫反应,造成株高和穗位高增加、抗生物和非生物胁迫能力降低、植株抗倒性降低,并最终导致产量损失。因此,培育耐密理想株型玉米是提高玉米耐密性的重要途径。 2…

Trends in Plant Science | 中国农科院基因组所武志强团队综述植物细胞器基因组

2024年1月13日,中国农科院深圳基因组研究所武志强教授团队综述了植物细胞器基因组研究进展,文章发表在《Trends in Plant Science》,题为:Plant organellar genomes: much done, much more to do。 质体和线粒体是唯一具有内共生起源基因组的细胞器。近几十年来,测序技术的…

kettle从入门到精通 第七十课 ETL之kettle kettle数据校验,脏数据清洗轻松拿捏

场景:输入在指定的错误(错误应涵盖数据类型不匹配的情况)行数内,trans不报错,但通过错误处理步骤捕捉,并记入文件,整个数据管线正常完成直至处理完最后一个输入行。解决方案:使用步骤【数据检验】进行处理。这个步骤和常规的业务系统对接三方接口一个逻辑,将符合规则的数…

Linux系统下C语言程序编译过程

Linux系统下C语言程序编译过程C语言程序编译过程:源程序 ---- 预处理 --- 编译 --- 汇编 --- 链接 --- 可执行文件1.预处理: 对源码进行简单的加工,GCC编译器会调用预处理器cpp对程序进行预处理,其实就是解释源程序中所有的预处理指令,如#include(文件包含)、#defi…

locust压测的基本使用

locust压测的基本使用这里介绍的是在本地启动locust以及做后续压测的流程以及各个参数含义一、启动locust执行命令 locust -f **.py (python脚本)如下图: 二、locust的UI界面1、启动界面8089是该服务启动的端口号,如果是本地启动,可以直接在浏览器输入http://localhost:80…