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

2014-11-24 08:25:48 · 作者: · 浏览: 0

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

环境:

主机:WIN7

开发环境:Qt5.2

说明:

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

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

源代码:

main.cpp

#include 
  
   
#include qtquick2applicationviewer.h

#include 
   
     #include 
    
      #include 
     
       #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 
  
   
#include 
   
     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 
  
   
#include qtquick2applicationviewer.h

#include 
   
     #include 
    
      #include 
     
       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
    }
}

运行效果:

\