我是靠谱客的博主 大胆红酒,最近开发中收集的这篇文章主要介绍【QT学习系列】绑定qml按钮点击信号与C++类槽函数效果,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

绑定qml按钮点击信号与C++类内槽函数

    • 1. 在qml的main函数中创建一个 Button 组件,给定 objectName 属性,如下:
    • 2. 在C++代码中新建一个类,继承QQuickView类,便于找到qml中对应的Item控件
    • 3. 因为要用到信号和槽函数,因此类内需要加宏 Q_OBJECT
    • 4. 定义三个函数,包括:GUI初始化函数、组件获取函数 和 信息打印函数
  • 效果

最近在学习QT,因为使用qml设计GUI界面相对简单,所以采用的是qml设计GUI界面,C++专注于事件处理的形式,但是在实现部分功能的时候,发现网上这方面的资料相对较少,因此打算把自己踩过的坑分享出来,做个补充。水平有限,需求的实现也许还有更好的方法,希望各位见谅!

第一个小Demo打算实现:通过 信号与槽函数 ,实现点击按钮,调用C++槽函数,执行任务(在控制台输出信息)。

1. 在qml的main函数中创建一个 Button 组件,给定 objectName 属性,如下:

import  QtQuick 2.9
import  QtQuick.Controls 2.2
Rectangle{
	visible : true
	width : 640
	height : 480
	Button{
        anchors.top: parent.top
	    anchors.left: parent.left
	    anchors.topMargin: 50
	    anchors.leftMargin: 50
		objectName:"Btn"
		tect:"确认"
	}
}

2. 在C++代码中新建一个类,继承QQuickView类,便于找到qml中对应的Item控件

3. 因为要用到信号和槽函数,因此类内需要加宏 Q_OBJECT

4. 定义三个函数,包括:GUI初始化函数、组件获取函数 和 信息打印函数

C++类申明与定义如下:
\ Print.h 文件
#ifndef PRINT_H
#define PRINT_H

#include <QObject>
#include <QString>
#include <QQuickItem>
#include <QQuickView>
#include <iostream>
#include <QQmlEngine>

class Print : public QQuickView
{
    Q_OBJECT
public:
Print(QQuickView* parent = nullptr);
private:
    QQuickItem* getItem(const QString &str);
    bool initializeUI();
public slots:
    void sendMes();
};

#endif // PRINT_H

#include "Print.h"

Print::Print(QQuickView *parent) : QQuickView(parent)
{
    initializeUI();
    auto Btn = getItem("Btn");
    connect(Btn, SIGNAL(clicked()), this , SLOT(sendMes()));
}
void Print::sendMes()
{
    std::cout << "You have chicked the Btn!" << std::endl;
}

QQuickItem * Print::getItem(const QString &objectName)
{
    auto item = this->rootObject()->findChild<QQuickItem *>(objectName);
    if(!item){
        qDebug() << Q_FUNC_INFO << QString("id,Get Item:%1""faild").arg(objectName);
        return nullptr;
    }
    else {
        std::cout << "Have found the item" << std::endl;
    }
    return item;
}

bool Print::initializeUI()
{
    this->engine()->addImportPath(":/main.qml");
    this->setSource(QUrl("qrc:/main.qml"));

    return !(this->rootObject() == nullptr);
}

效果

点击按钮

在这里插入图片描述

输出打印信息

在这里插入图片描述

最后

以上就是大胆红酒为你收集整理的【QT学习系列】绑定qml按钮点击信号与C++类槽函数效果的全部内容,希望文章能够帮你解决【QT学习系列】绑定qml按钮点击信号与C++类槽函数效果所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部