首页 > 其他分享 >clion+msvc+qml demo

clion+msvc+qml demo

时间:2024-06-15 23:12:08浏览次数:26  
标签:MyObject int void value qml str msvc clion

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(appqmltest02
    main.cpp
    MyObject.cpp
    MyObject.h
)

qt_add_qml_module(appqmltest02
    URI qmltest02
    VERSION 1.0
    QML_FILES Main.qml
    QML_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.appqmltest02
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

target_link_libraries(appqmltest02
    PRIVATE Qt6::Quick
)

include(GNUInstallDirs)
install(TARGETS appqmltest02
    BUNDLE 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.Controls

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello qml")

    MyObject {
        // 约等于组件对象名(class变量对象名)
        id: myobj
        str: "hahahah"
        value: 10

        // 约等于构造函数
        Component.onCompleted: {
            console.log(value, str)
        }
    }

    // 列布局
    Column {
        // 行布局
        Row {
            spacing: 2
            Rectangle {
                id: r1
                color: "red"
                height: 100
                width: 200
            }

            MyRectangle {
                x: r1.width + 20
            }

            Text {
                id: text01
                text: qsTr("text")
                font.pixelSize: 30
            }
        }

        Button {
            id: btn1
            width: 50
            height: 50
            text: "btn1"

            // 自定义属性并赋值
            property string tx: myobj.str
            onClicked: {
                console.log("btn1 被点击")
                text01.text = tx + myobj.value

                myobj.func();
            }
        }
    }
}

MyRectangle.qml

import QtQuick

Rectangle {
    id: r2
    property int aa: 1

    color: "blue"
    height: 100
    width: 200
}

MyObject.h

//
// Created by Dark on 24-4-28.
//

#pragma once

#include <QObject>

class MyObject : public QObject
{
    Q_OBJECT

public:
    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的目录,运行

运行结果:

标签:MyObject,int,void,value,qml,str,msvc,clion
From: https://www.cnblogs.com/DarkH/p/18249944

相关文章

  • 完美解决“由于找不到msvcp140.dll,vcruntime140_1.dll,msvcp100.dll,msvcr120.dll等导致
    成功解决问题:由于找不到msvcp140.dll,vcruntime140_1.dll,msvcp100.dll,msvcr120.dll,mfc140u.dll,mfc140u.dll等导致的无法继续执行代码。重新安装程序可能会解决此问题。......
  • HbuilderX,找不到rollup/rollup-win32-x64-msvc
    在使用HbuilderX,使用vue3开发uniapp时,我运行app,报错,rollup组件找不到了。这个rollup是一个编译js的工具,win32-x64的意思是采用windows版本64位的运行版本,msvc是说,需要windows平台下的msvc,它是一种c++编译器的类型,比如QT,就有使用另一种MinGW编译器。总的来说,rollup这个组件,是在64......
  • 《火炬之光2》启动受阻?快速解决“msvcr100.dll”缺失问题!
    在满怀期待地点击《火炬之光2》的启动图标,准备沉浸于那片充满奇幻与冒险的世界时,突如其来的“msvcr100.dll缺失”错误提示无疑给玩家的热情泼了一盆冷水。别担心,这个常见问题背后有着简单的解决方案。本文将手把手教你如何迅速恢复游戏运行,让冒险之旅顺利启程。问题解析:“msv......
  • QQ音乐遭遇系统错误:msvcp140.dll丢失的全方位解决指南
    在享受QQ音乐带来的丰富曲库与个性化推荐时,偶尔会遇到让人头疼的技术难题,其中之一便是“msvcp140.dll丢失”的系统错误。这个看似复杂的错误信息实际上指向了一个相对简单的解决路径。本文将为您详细介绍这一问题的起因、影响以及一套行之有效的解决策略,帮助您迅速重回音乐的世......
  • JetBrians的clion在运行代码时无法进行system("cls")清屏命令
    终极任务:找到小扳手在代码运行的基础下找到这个小扳手如果是新UI界面的话,在运行的基础下点这三个点这里是修改运行配置的地方下拉找到"在外部控制台中运行"的选项勾选上,就可以在后面的运行调用电脑自带的控制台了......
  • QML学习——QML动画元素(二)
    QML动画元素所有的动画元素都继承自Animation元素不要过度的使用动画。用户界面动画的设计应该尽量小心,动画是让界面更加生动而不是充满整个界面。眼睛对于移动的东西非常敏感,很容易干扰用户的使用。①PropertyAnimation属性动画元素可以通过不同的方式来使用,取决于......
  • 反转21克msvcr100.dll丢失怎么办?反转21克msvcr100.dll丢失问题的全面解析与解决之道
    《反转21克》是目前第一款以科幻为题材的互动影像作品。然而很多玩家都遇到了反转21克msvcr100.dll丢失的问题,其中msvcr100.dll是MicrosoftVisualC++2010RedistributablePackage的一部分,它提供了运行时库支持,下面一起来看看解决方法介绍吧!重新安装相关程序重新安装与ms......
  • pr找不到msvcr110.dll无法执行代码怎么解决?总结7个有效方法分享
    msvcr110.dll是MicrosoftVisualC++2012Redistributable的一个组成部分,这是一个动态链接库(DLL)文件。它主要用于存储许多程序共同使用的代码和资源,对于执行C++编写的应用程序极为关键。如何打开软件提示找不到msvcr110.dll或msvcr110.dll丢失,则可能意味着它已被误删或因......
  • clion中解决控制台输出中文时的乱码问题
    1.项目编码配置都建议设置为utf-8编码  2.按住Ctrl+Shift+Alt+/,选中Registry…,然后取消run.processes.with.pty  3.重新运行程序,乱码消除(不行的话,关闭clion,再打开试试) ......
  • 解决CLion调试时无法显示变量值的问题
    1问题描述使用CLion的时候,调试时无法显示变量的值,例如:图来自StackOverflow。2解决办法可以尝试切换调试器解决,在Linux下,CLion支持GDB和LLDB,如果GDB不行,可以切换到LLDB。切换方式:File|Settings|Build,Execution,Deployment|Toolchains,将其中的Debugger切换:如果De......