qml与c++混合编程之简单demo说明

最近接触QML,感觉非常kuo,demo中实现一个按键,名为Open,功能就是打开文件,很简单。打开过程是c++干事,界面是QML写的。

qml与c++混合编程不清楚的,可以看我前面一篇文档。

file.h

#ifndef FILE_H
#define FILE_H
#include <QObject>
class test_file: public QObject
{
    Q_OBJECT
public:
    explicit test_file(QObject *parent = 0);
signals:
    void someSignal();
public slots:
    void on_actionOpen_triggered(); // 打开文件菜单
 
};
 
#endif // FILE_H
on_actionOpen_triggered();是槽函数,还得有个signals函数;

file.cpp

#include "file.h"
#include "QDebug"
#include <QtWidgets/QFileDialog>
test_file::test_file(QObject *parent):
    QObject(parent)
{
}

void test_file::on_actionOpen_triggered()// 打开文件菜单
{
    QString fileName = QFileDialog::getOpenFileName(); // 获取文件路径
    emit someSignal();
    qDebug()<<fileName;
}
 main.cpp 

#include "mainwindow.h"
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QQmlEngine>
#include <QtQml>
#include "file.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    QQmlApplicationEngine engine;
    test_file f;
    engine.load(QUrl(QStringLiteral("qrc:/edit/main.qml")));
    engine.load(QUrl(QStringLiteral("qrc:/edit/Buttons.qml")));
    engine.rootContext()->setContextProperty("FILE_USER",&f);
 
    return a.exec();
}

main.qml

import QtQuick 2.0
import QtQuick.Controls 1.1
 
ApplicationWindow {
    id: aw
    visible: true
    width: 900
    height: 900
    title: qsTr("edit")
Rectangle {
    width: 600
    height: 600
    color: "#609ca0"
    Rectangle{//按钮
        x:50;y:40
        Buttons{
            anchors.horizontalCenter: parent.horizontalCenter
            text: "Open"
             onClick.onClicked:FILE_USER.on_actionOpen_triggered()
        }
    }
  }
}
 

Buttons.qml

import QtQuick 2.0
Rectangle {
    id:button_type
    property alias onClick:ma
    property alias text: textElement.text;
 
    width: 90; height: 40
    border.color: "steelblue";border.width:2
    radius: 8
 
    Text {
        id: textElement
        anchors.centerIn: parent
        font.pointSize: 25
        style: Text.Raised; 
    }
    MouseArea{
        id: ma
        anchors.fill: parent
	}
}
 

运行结果如下:


点击Open的时候,弹出如下弹框选择:


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值