qt下qml和c++交互信号槽机制测试

qt下qml和c++交互信号槽机制测试


本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.


环境:

主机:WIN7

开发环境:Qt5.2


说明:

写一个测试程序测试qml和c++利用信号槽机制传输信息.

测试程序功能:16进制和10进制互相转换.


源代码:

main.cpp

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"

#include <QtQml/QQmlContext>
#include <QtQuick/QQuickItem>
#include <QtQuick/QQuickView>

#include "myclass.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    MyClass my;

    QtQuick2ApplicationViewer viewer;
    viewer.setMainQmlFile(QStringLiteral("qml/Hex2Dec/main.qml"));

    QQuickItem *rootObject = viewer.rootObject();
    rootObject->setProperty("fileName", "jdh");
    QObject::connect(rootObject,SIGNAL(btn_2dec_click(QString)),                     &my,SLOT(slot_hex2dec(QString)));
    QObject::connect(rootObject,SIGNAL(btn_2hex_click(QString)),                     &my,SLOT(slot_dec2hex(QString)));
    QObject::connect(&my,SIGNAL(sig_disp(QVariant)),                     rootObject,SLOT(disp(QVariant)));

    //viewer.showExpanded();
    viewer.showFullScreen();

    rootObject->setProperty("str_out","0x");

    return app.exec();
}

myclass.h

#ifndef MYCLASS_H
#define MYCLASS_H

#include <QObject>
#include <QDebug>

class MyClass : public QObject
{
    Q_OBJECT
public:
    explicit MyClass(QObject *parent = 0);

signals:

    void sig_disp(QVariant str_num);

public slots:

    void slot_hex2dec(QString str_num);
    void slot_dec2hex(QString str_num);
};

#endif // MYCLASS_H

myclass.cpp

#include "myclass.h"

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"

#include <QtQml/QQmlContext>
#include <QtQuick/QQuickItem>
#include <QtQuick/QQuickView>

MyClass::MyClass(QObject *parent) :
    QObject(parent)
{
}

//十六进制转十进制
void MyClass::slot_hex2dec(QString str_num)
{
    qDebug() << "11" << str_num;
    bool ok;

    emit sig_disp("dec:" + QString::number(str_num.toInt(&ok,16),10));
}

//十进制转十六进制
void MyClass::slot_dec2hex(QString str_num)
{
    qDebug() << "22" << str_num;
    bool ok;

    emit sig_disp("hex:0x" + QString::number(str_num.toInt(&ok,10),16));
}

main.qml

import QtQuick 2.0
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.0

Rectangle {
    id : rect

    //按键按下发射
    signal btn_2dec_click(string str_num)
    signal btn_2hex_click(string str_num)

    width: 360
    height: 360

    ColumnLayout {
        id: columnLayout1
        x: 8
        y: 15
        width: 310
        height: 324

        Label {
            id: label2
            x: 83
            y: -37
            width: 178
            height: 12
            text: "十六进制和十进制转换器 by jdh"
        }

        RowLayout {
            id: rowLayout1
            x: 0
            y: -216
            width: 310
            height: 50
            spacing: 1

            Label {
                id: label1
                x: 0
                y: -199
                width: 57
                height: 39
                text: "输入:"
            }

            TextField {
                id: txt_in
                x: 71
                y: -204
                width: 254
                height: 39
                placeholderText: qsTr("Text Field")
            }
        }


        RowLayout {
            id: rowLayout2
            x: 0
            y: -153
            width: 310
            height: 50

            Label {
                id: label3
                x: 13
                y: -151
                width: 57
                height: 39
                text: "输出:"
            }

            TextField {
                id: txt_out
                x: 76
                y: -151
                width: 254
                height: 39
                placeholderText: qsTr("Text Field")
            }
        }


        RowLayout {
            id: rowLayout3
            x: 0
            y: -80
            width: 310
            height: 50

            Button {
                id: btn_2dec
                x: 13
                y: -75
                width: 108
                height: 44
                text: "转十进制"

                onClicked: btn_2dec_click(txt_in.text)
            }

            Button {
                id: btn_2hex
                x: 222
                y: -75
                width: 108
                height: 44
                text: "转十六进制"

                onClicked: btn_2hex_click(txt_in.text)
            }
        }

    }

    function disp(str_num)
    {
        txt_out.text = str_num
    }
}

运行效果:



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。