拒绝废话!

基于Qt6.6.0   首先,新建个qt quick project

1.Qt creator新建c++头文件

#ifndef MYTEST_H_H
#define MYTEST_H_H
#include<QObject>
#include<QDebug>
namespace myNamespace {  //不是必须
class Test:public QObject{  //仅需改动类名,其他不要动
    Q_OBJECT  //不要动,是private
public slots:  //不要动,槽
    void doSomething(){  //自定义个成员函数用于执行所需操作,被下面signals信号函数调用。
        qDebug()<<"okllllllllllllllllllll\n";  //控制台输出
    }
signals:  //不要动,信号
    void begin();  //自定义个信号名称。
};
}


#endif // MYTEST_H_H

2.在main.cpp中注册自定义类

#include "mytest_h.h"
#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    
    //注册c++自定义Test类,其中“customlize”是下一步Main.qml文件中需要导入的文件名,随便起。
    //整个main.cpp文件只要加入下面这句,其他内容不要动。    
    qmlRegisterType<myNamespace::Test>("customlize",1,0,"Test");
    
    QQmlApplicationEngine engine;
    const QUrl url(u"qrc:/untitled4/Main.qml"_qs);
    QObject::connect(
        &engine,
        &QQmlApplicationEngine::objectCreationFailed,
        &app,
        []() { QCoreApplication::exit(-1); },
        Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

3.Main.qml调用c++代码执行

import QtQuick
import QtQuick.Window
import QtQuick.Controls 2.5

import customlize 1.0

ApplicationWindow {
    id: mainWindow
    width: 640
    height: 480
    visible: true
    title: qsTr("是否支持中文")
    // 设置窗口的样式,无边框
    // flags: Qt.Window | Qt.FramelessWindowHint
    Button{
        id: basicButton
        text: qsTr("最基本的按钮")
        MouseArea {
            anchors.fill: parent
            onClicked: {
                hello.begin();  //begin成员函数是c++自定义的signal函数
            }
        }
        Test{
            id:hello
            onBegin:doSomething();  //doSomething成员函数是c++自定义的slots函数,onBegin就是on+c++自定义的signal函数的begin函数名,注意begin首字母必须大写。
        }
    }
}

调试发现:控制台输出相关字符串。。。。

更多推荐