Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Qt5.8ÖÐQML½Ì³Ì²¢½áºÏʵ¼Ê¹¤³ÌÏîÄ¿Ïê½â
 
  5176  次浏览      27
 2019-7-18
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ¶¡¶¡µÄ²©¿Í£¬±¾ÎÄÖ÷Òª½²½âÕû¸ö¹¤³ÌµÄËĸö֪ʶµãÕ¹¿ª£¬ÆÚ¼ä»á²»¶ÏÌù³öÉæ¼°µÄÏà¹ØÄ£¿éµÄ´úÂ룬×îÖÕÀí½âÕû¸ö¹¤³Ì¼°QML±à³Ì´óÖÂ˼·£¬Ï£Íû¶ÔÄúµÄѧϰÄÜÓÐËù°ïÖú¡£

QtÊÇÒ»¸ö·Ç³£²»´íµÄC++ƽ̨£¬Èç¹ûÏë´´Ôì³ö¶àƽ̨µÄ¿Í»§¶Ë³ÌÐò£¬²¢ÇÒÔÚGUI±à³ÌÖÐÒýÈëʱ÷Ö¡¢¸ßЧ¡¢Óï·¨¼ò½àÇåÎúµÄXML£¬JSµÈÌØÐÔ£¬¿ÉÒÔ³¢ÊÔÒ»ÏÂQt¡£´ËÍâQtµÄ¿â·â×°Ò²ÓеãÀàËÆJAVA£¬Èç¹û¶ÔJAVAÓïÑÔÊìϤ£¬²¢ÇÒÏ£Íû´´Ôì³öƯÁÁµÄGUI½çÃæ£¬Ò²¿ÉÒÔÀ´³¢ÊÔÒ»ÏÂQt¡£ÕâÆª²©¿Í»á½éÉÜÒ»ÏÂQtÖÐʹÓÃQMLÀ´Éè¼ÆGUI½çÃæ£¬ÒÔ¼°QMLÓëC++½»»¥µÄ·½Ê½¡£

QMLÊÇQt×Ô¶¨ÒåµÄÒ»ÖÖGUIÃèÊöÎļþ£¬ÆäÎĵµ½á¹¹ÓеãÀàËÆNodeJS»òÕßTypeScript£¬¸úAndroid±à³ÌÖеÄActivityµÄÉè¼ÆÒ²ºÜÀàËÆ£¬ÔÚ¿Í»§¶ËGUI±à³ÌµÄÄ£ÐÍÖÐÒýÈëÁË´óÁ¿µÄWEBǰ¶ËÉè¼ÆË¼Ï룬×ÅʵÈÃÈ˾ªÑÞ¡£

ÔÚQT5.8ÖÐн¨Ò»¸öQt Quick2 Application¼´¿ÉʹÓÃQMLÀ´¶¨ÒåGUI£º

ÏÂÃæÊÇÎÒÒ»¸öʵ¼Ê¹¤³ÌµÄ¹¤³Ì½ØÍ¼£¬ÒÔ¼°ÆäÖбàдµÄÖ÷½çÃæ´úÂ룺

main.qml£º

import QtQuick 2.7
import QtQuick.Controls 2.0

import com.newflypig.Finger 1.0 //À´×ÔÓÚC++Ààfinger.hºÍfinger.cpp

ApplicationWindow {
id:root
visible: true
width: 800
height: 600
title: qsTr("ÈüÑóÃæ°åÖ¸ÎÆÄ£¿é¸¨Öú¹¤¾ß")

property int intPower: 1
property bool connected: false

Row {
spacing: 0
width: 800
height: parent.height

//×ó²¿Áбí ListViewµÄMVCÄ£ÐÍ
Rectangle {
width: 300; height: parent.height; color: "#4A5459"
ListView {
anchors.fill: parent
model: FingerListModel{id:fingerListModel} //MVCÖеÄModel²ã£¬À´×ÔÓÚFingerListModel.qml
delegate: Rectangle{ //RectangleÊÇMVCÖеÄView²ãÃèÊö¡£ÆäÖеÄMouseAreaÒÔ¼°MenuµÈÃèÊö£¬¿ÉÀí½âΪControl²ã
id: fingerListDelegate
width: parent.width; height: 60
color: "#4A5459"
Row{
leftPadding: 5
topPadding: 5
spacing: 20
Image {
width: 40
height: 40
source: "images/finger2.png"
}
Text{
width: 90
anchors.verticalCenter: parent.verticalCenter
text: name
color: "white"
font.pixelSize: 20
font.family: "΢ÈíÑźÚ"
}
Text{color: "white";anchors.verticalCenter: parent.verticalCenter;font.family: "΢ÈíÑźÚ";
text: power
width:50
font.pixelSize: 15
}
Text{color: "white";anchors.verticalCenter: parent.verticalCenter;font.family: "΢ÈíÑźÚ";
text: fid
width:20
horizontalAlignment: Text.AlignRight
font.pixelSize: 15
}
}
//Êó±ê½øÈ룬hoverÑùʽ¸Ä±ä£¬ÓÒ»÷²Ëµ¥
MouseArea{
id:mouseMA;
acceptedButtons: Qt.RightButton
anchors.fill: parent
hoverEnabled: true
propagateComposedEvents: true
enabled:true
onEntered:{
fingerListDelegate.color = "#404244"
}
onExited:{
fingerListDelegate.color = "#4A5459"
}
onClicked: { //ÓÒ»÷²Ëµ¥
contextMenu.x = mouseMA.mouseX;
contextMenu.y = mouseMA.mouseY;
contextMenu.fid = fid;
contextMenu.open();
}
}
Menu { id: contextMenu
width: 100
property string fid: "0"
MenuItem {
width: 100
text: "ɾ³ý"
font.family: "΢ÈíÑźÚ"
font.pixelSize: 15
enabled: connected
onTriggered: {
if(!fingerModual.deleteFingerAddress(parseInt(fid))){
taMessage.append("³É¹¦É¾³ý " + fid + " ºÅλÖÃÖ¸ÎÆ")
fingerListModel.removeFid(fid)
}
}
}
}
}
}
}

Column {
width: 500; height: 600;
leftPadding: 40
topPadding: 20
spacing: 10

TextField {
id: tfName
placeholderText: "ÐÕÃû"
width: 220
selectByMouse: true
}

//ȨÏÞ°´Å¥
Row {
id:powerButtons
spacing: 5
PowerButton{id:pButton1; powStr: "1"} //PowerButtonÀ´×ÔÓÚPowerButton.qmlÊÇÒ»¸ö¸öССµÄȨÏÞ°´Å¥£¬µã»÷ºó±äÉ«£¬²¢ÇÒÈ«¾ÖȨÏ޸ıä
PowerButton{id:pButton2; powStr: "2"}
PowerButton{id:pButton3; powStr: "3"}
PowerButton{id:pButton4; powStr: "4"}
PowerButton{id:pButton5; powStr: "5"}
PowerButton{id:pButton6; powStr: "6"}
PowerButton{id:pButton7; powStr: "7"}
PowerButton{id:pButton8; powStr: "8"}
PowerButton{id:pButton9; powStr: "9"}
}

//¼Èë°´Å¥
Row{
spacing: 30
Button {
id: buttonInput
text: "¼ÈëÖ¸ÎÆ"
width: 95
enabled: connected
onClicked: fingerInput();
}
Rectangle{
id: input1Circle
width: 30
height: 30
color: "white"
radius: 15
border.color: "#66A334"; border.width: 2
}

Rectangle{
id: input2Circle
width: 30
height: 30
color: "white"
radius: 15
border.color: "#66A334"; border.width: 2
}
}

Button{
text: "ÑéÖ¤²âÊÔ"
width: 220
enabled: connected
onClicked: {
taMessage.append("×¼±¸ÑéÖ¤Ö¸ÎÆ")
taMessage.append("Ç뽫ÊÖÖ¸ÖÃÓÚÖ¸ÎÆ²É¼¯Æ÷ÉÏ£¬·ñÔòϵͳ½«ÓÚ20ÃëºóÍ£Ö¹²É¼¯")

searchFingerTimer.start()
}
Timer{
id: searchFingerTimer
interval: 500;
running: false;
repeat: false;
onTriggered: {
searchFinger()
}
}
}

Row {
spacing: 5
Button{
text: "±¸·ÝÖ¸ÎÆ¿â"
width: 220
enabled: connected
onClicked: {
fingerModual.backupFingerAddress()
taMessage.append("³É¹¦±¸·Ý " + fingerModual.objFingerList.length + "¸öÖ¸ÎÆÊý¾Ýµ½Êý¾Ý¿â")
}
}

Button{
text: "»¹Ô­Ö¸ÎÆ¿â"
width: 220
enabled: connected
onClicked: {
fingerModual.restoreFingerAddress()
updateModel();
taMessage.append("³É¹¦»¹Ô­ " + fingerModual.objFingerList.length +" ¸öÖ¸ÎÆÊý¾Ý")
}
}
}

Flickable {
id: flickable
width: parent.width - 55
height:parent.height - 230

TextArea.flickable: TextArea {
id: taMessage
wrapMode: TextArea.Wrap
background: Rectangle{
color: "#2E2F30"
}
readOnly: true
color: "#38FF28"
selectByMouse: true
}
ScrollBar.vertical: ScrollBar { }
}
}
}

Image {
id: image
x: 605
y: 16
width: 146
height: 146
source: "images/finger3.png"
}

//ʹÓÃchildren·ÃÎÊ×ÓÔªËØ£¬Ê¹ÓÃfor i in listµÄ·½Ê½±éÀú
function changeAllPowerButtonColor(){
var list = powerButtons.children;
for (var i in list){
list[i].color = "#4A5459";
}
}

//µÚ¶þ´Î¼ÈëÖ¸ÎÆµÄ¶¨Ê±Æ÷
Timer{
id:input2Timer
interval: 1000
running: false
repeat: false
onTriggered: {
var result = fingerModual.input2(intPower, tfName.text);
input2Circle.color = "white"
if(result >= 0){
taMessage.append("Ö¸ÎÆÂ¼Èë³É¹¦£¬±£´æÓÚÖ¸ÎÆ¿â " + result + " ºÅλÖÃ")
fingerListModel.append({
fid: fingerModual.returnFid,
name: tfName.text===""?"ÎÞÃû":tfName.text,
power: (parseInt(result/100) + 1) + ""
})
}else if(result === -2){
taMessage.append("Á½´Î²É¼¯µÄÖ¸ÎÆÌØÕ÷²îÒìÌ«´ó£¬Â¼Èëʧ°Ü")
}else{
taMessage.append("²É¼¯Ê§°Ü£¬error code:" + result)
}
}
}

//µÚÒ»´Î¼ÈëÖ¸ÎÆµÄ¶¨Ê±Æ÷¡£·ÀÖ¹UI×èÈû¿ÉÓÃTimer
Timer{
id:input1Timer
interval: 500
running: false
repeat: false
onTriggered: {
var result = fingerModual.input1();
input1Circle.color = "white"
if(result === 0){
taMessage.append("µÚÒ»´Î²É¼¯³É¹¦£¬×¼±¸²É¼¯µÚ¶þ´Î£¬Ç뽫ÊÖÖ¸·ÅÔڲɼ¯Æ÷ÉÏ")
input2Circle.color = "#66A334"
input2Timer.start()
}else{
taMessage.append("²É¼¯Ê§°Ü£¬error code:" + result)
}
}
}

//¼ÈëÖ¸ÎÆ
function fingerInput(){
taMessage.append("Ç뽫ÊÖÖ¸·ÅÔڲɼ¯Æ÷ÉϼÈëµÚÒ»´ÎÖ¸ÎÆ")
input1Circle.color = "#66A334"
input1Timer.start()
}

//ËÑË÷Ö¸ÎÆ
function searchFinger(){
var result = fingerModual.search();
if(result === -1)
taMessage.append("²É¼¯³¬Ê±£¬ÇëÖØÊÔ")
else if(result === -2)
taMessage.append("ûÓÐÆ¥Åäµ½ÈκÎÖ¸ÎÆ£¬ÇëÖØÊÔ")
else
taMessage.append("³É¹¦Æ¥Åäµ½" + result + "ºÅÖ¸ÎÆ£¬ÐÕÃû£º" + fingerModual.searchName)
}

Component.onCompleted: {
var result
taMessage.append("ÕýÔÚÁ¬½ÓÖ¸ÎÆÄ£¿é...")
if(fingerModual.connect()){
taMessage.append("Á¬½ÓÖ¸ÎÆÄ£¿é¡¸Ê§°Ü¡¹£¬Ä¿Ç°´¦ÓÚÀëÏß״̬£¬Ïà¹Ø²Ù×÷ÎÞ·¨Ê¹Óã¬Çë¼ì²éÁ¬½Ó¡£")
connected = false;
}else{
taMessage.append("Á¬½ÓÖ¸ÎÆÄ£¿é¡¸³É¹¦¡¹")
result = fingerModual.buildFingerList()
if(result !== -1){
taMessage.append("¹¹ÔìÖ¸ÎÆ¿â³É¹¦£¬´ÓÖ¸ÎÆÄ£¿é¶ÁÈ¡ " + result + " ¸öÖ¸ÎÆÊý¾Ý")
updateModel();
connected = true;
} else {
taMessage.append("¹¹ÔìÖ¸ÎÆ¿âʧ°Ü")
}
}
}

function updateModel(){
fingerListModel.clear();
for(var i = 0; i < fingerModual.objFingerList.length; i++){
fingerListModel.append({
fid: fingerModual.objFingerList[i].fid,
power: fingerModual.objFingerList[i].power,
name: fingerModual.objFingerList[i].name===""?"ÎÞÃû":fingerModual.objFingerList[i].name
});
}
}
}

Õû¸ö³ÌÐòÅÜÆðÀ´ÊÇÕâÑùµÄ£º

Ö÷½çÃæ´úÂëµÄÊéдÎÒ»ù±¾É϶¼Ð´ºÃ×¢ÊÍÁË£¬¿ÉÒÔ¿´µ½ÆäÖÐÓпؼþµÄ¶¨Ò壬ҲÓÐfunctionº¯ÊýµÄ±àд£¬¼°ÆäÀàËÆWEBǰ¶Ë±à³Ì¡£

Õû¸ö¹¤³ÌÉæ¼°Á˲»ÉÙ֪ʶµã£º

MVCÄ£Ð͵ÄʹÓÃ

Êó±ê½øÈëʼþ¼°ÓÒ»÷²Ëµ¥

¶¨Ê±Æ÷ʹÓÃ

QML¶¨ÒåC++Àà¶ÔÏó¼°µ÷ÓÃÆä·½·¨

ÏÂÃæ¾ÍÉÏÊöËĸö֪ʶµãÕ¹¿ªËµÒ»Ëµ£¬ÆÚ¼ä»á²»¶ÏÌù³öÉæ¼°µÄÏà¹ØÄ£¿éµÄ´úÂ룬×îÖÕÀí½âÕû¸ö¹¤³Ì¼°QML±à³Ì´óÖÂ˼·¡£

MVCÄ£Ð͵ÄʹÓÃ

ÔÚ½çÃæµÄ×ó²àÇøÓòÊÇÒ»¸öListViewÁÐ±í£¬ÀàËÆAndroid±à³ÌµÄListView»òÕßGridView£¬¾ÍÊÇÒ»¸öÈÝÆ÷¿Õ¼ä£¬ÀïÃæÈÃÄã¶Ñ·ÅÒ»×éÊý¾Ý£¬ÒÔ×Ô¶¨ÒåµÄÑùʽÏÔʾ³öÀ´¡£ListViewͨ³£Çé¿ö϶¼»áʹÓÃMVC½á¹¹À´Éè¼Æ£¬äÖȾ·½Ê½ViewºÍÊý¾ÝÄ£ÐÍModelÏ໥¸ôÀ룬ÓÐʱºò¿ØÖÆÂß¼­Control±È½Ï¼òµ¥µÄÇé¿öÏ¿ÉÒÔ¸úV²ã»ìºÏ£¬Ö÷½çÃæmain.qmlÖеÄ22-100ÐдúÂë¾ÍÊÇÔÚÃèÊöListView¡£

¿ÉÒÔ¿´µ½µÚ26ÐÐÃèÊöÁËÊý¾ÝÄ£ÐÍ£ºmodel: FingerListModel{id:fingerListModel}£»

µÚ27-100ÐÐÊÇÃèÊöµÄÏÔʾäÖȾºÍ¿ØÖÆÂß¼­£ºdelegate

ÏÂÃæÊÇFingerListModelµÄ¶¨Ò壺

FingerListModel.qml

import QtQuick 2.0

ListModel {
// ListElement {
// fid: "1"
// power: "1"
// name: "test"
// }
function removeFid(fid){
for(var i = 0; i < count; i++){
if(get(i).fid === fid){
remove(i);
break;
}
}
}
}

model

¿ÉÒÔ¿´µ½Õâ¸öÊý¾ÝÄ£ÐÍÖÐʲô¶¼Ã»ÓУ¬Ö»ÓÐÒ»¸ö²âÊÔÊý¾Ý±»×¢Ê͵ôÁË£¬ºÍÒ»¸öɾ³ýÔªËØµÄº¯Êý¡£

ÎÒÃÇÀ´·ÖÎöһϣ¬Õâ¸öFingerListModel.qmlÊÇÎÒÃÇ×Ô¶¨ÒåµÄ¿Ø¼þ£¬ÆäÖÐÖ»ÓÐÒ»¸öÔªËØ¾ÍÊÇQML×Ô´øµÄListModel£¬Õâ¸öListModelÖпÉÒÔ·ÅÈô¸ÉListElementÔªËØ£¬²¢ÇÒ×Ô´øÁËÈô¸É¸öº¯Êý£¬±ÈÈçÔÚÎÒÃÇ×Ô¶¨ÒåremoveFidº¯ÊýÖÐÐèÒªµ÷ÓõÄremove()º¯Êý¡£

³ÌÐò³õʼʱ£¬×ó²àÁбíÖÐÔªËØÊǶ¯Ì¬´ÓÖ¸ÎÆÉ豸ºÍÊý¾Ý¿â¼ÓÔØ½øÀ´µÄ£¬Òò´ËÕâ¸öListModelµÄ³õʼʱÊÇûÓÐÔªËØµÄ¡£ÎÒÃÇÔÚÖ÷½çÃæmain.qmlµÄ302-330ÐеÄComponent.onCompleted,updateModel()º¯Êý¾ÍÊÇÔÚ×ö¶¯Ì¬¼ÓÔØµÄ²Ù×÷¡£

delegate

delegateµÄÓ¢ÎĽâÊÍÊÇίÍдú±í£¬ÕâÀïÀí½âΪÿһ¸ö×ÓÔªËØµÄÏÔʾ·½Ê½£¬¿ÉÒÔ¿´µ½ÆäÖж¨ÒåÁËÒ»¸öRow£¬È»ºó×ó²àÒ»¸öͼ±êÔªËØImage£¬½Ó×ÅÊÇÈý¸öÎı¾ÔªËØText£¬·Ö±ðÏÔÊ¾Ö¸ÎÆµÄÐÕÃû¡¢È¨ÏÞºÍID£¬ÕâÑùµÄÃèÊöÊǷdz£¼ò½àÒ×¶®µÄ¡£´ËÍâdelegateÖл¹Ê¹ÓÃÁËMouseAreaÀ´Éè¼ÆÊó±êhoverʼþºÍÓÒ¼ü²Ëµ¥Menu£¬ÕâЩ¿´ÎҵĴúÂëºÍ×¢ÊÍÓ¦¸ÃºÜÈÝÒ×Àí½â¡£

Êó±ê½øÈëʼþ¼°ÓÒ»÷²Ëµ¥

ÉÏÃæ½âÊÍdelegateʱÒѾ­½éÉܹýÁË£¬Êó±êµÄʼþͨ¹ýMouseAreaÀ´ÃèÊö£¬ÔÚmain.qmlµÄ61-97ÐоÍÊÇÕû¸öÊó±êhoverÑùʽºÍÓÒ¼ü²Ëµ¥µÄÉè¼Æ¡£ÕâÀï¾Í²»ÔÙÕ¹¿ª½éÉÜ£¬Èç¹ûÓÐʲô²»Àí½âµÄ¿ÉÒÔ¸øÎÒÁôÑÔ»òÕß¼ÓÎÒ΢ÐÅ¡£

¶¨Ê±Æ÷ʹÓÃ

ÎÒÃÇÖªµÀÔÚWEBǰ¶ËÉè¼ÆÖУ¬ÓÐÁ½¸ö¶¨Ê±Æ÷ÉñÆ÷£ºsetIntervalºÍsetTimeout£¬ÔÚQMLÖУ¬¶¨Ê±Æ÷±»·â×°³ÉÁËÒ»¸öÔªËØTimer£º

main.qmlÖÐÓõ½Á˺ܶඨʱÆ÷£¬ÊÇÓÃÀ´·ÀÖ¹GUI×èÈûµÄ£¬ÒòΪºǫ́´¦ÀíÖ¸ÎÆµÄËٶȷdz£Âý£¬Óû§ÔÚ½çÃæÉÏÒ»¸ö²Ù×÷ÏÂÈ¥»áÖ±½Óµ¼ÖÂÕû¸öGUI×èÈû£¬²¢ÇÒÊó±ê³Êɳ©״£¬Í¬Ê±GUIÉϵÄÏûÏ¢ÌáʾÎı¾¿òÒ²»á×èÈû£¬µ¼ÖÂÐÅÏ¢ÌáʾÎÞ·¨¼°Ê±¸üе½½çÃæÉÏ£¬ÓÚÊÇÎÒÓÃÁËTimerÀ´±äÏàµÄʵÏÖÁËÒ»ÖÖ¶àÏ̵߳ļÙÏó¡£

¿´main.qmlµÄ159ÐУº

Button{
text: "ÑéÖ¤²âÊÔ"
width: 220
enabled: connected
onClicked: {
taMessage.append("×¼±¸ÑéÖ¤Ö¸ÎÆ")
taMessage.append("Ç뽫ÊÖÖ¸ÖÃÓÚÖ¸ÎÆ²É¼¯Æ÷ÉÏ£¬·ñÔòϵͳ½«ÓÚ20ÃëºóÍ£Ö¹²É¼¯")

searchFingerTimer.start()
}
Timer{
id: searchFingerTimer
interval: 500;
running: false;
repeat: false;
onTriggered: {
searchFinger()
}
}
}

ÕâÀﶨÒåÁËÒ»¸ö°´Å¥ButtonºÍÒ»¸ö¶¨Ê±Æ÷Timer£¬¶¨Ê±Æ÷È¡ÃûidΪsearchFingerTimer,²¢ÇÒÉèÖÃÁ˳õʼÔËÐкÍÖØ¸´Ö´ÐвÎÊý¾ùΪfalse¡£ÔÚButtonµÄclickʼþÖУ¬ÎÒÃÇÆô¶¯Á˶¨Ê±Æ÷£¬¶¨Ê±Æ÷500ºÁÃëºó»áÖ´ÐÐsearchFinger()ʼþ£¬ÕâÑù¾Í±ÜÃâÁËsearchFinger()ʼþÒ»ÏÂ×Ó½«GUI¿¨ËÀµÄ±¯¾ç·¢Éú£¬²¢ÇÒtaMessage¿ÉÒÔ¼°Ê±×ö³öÏûÏ¢Ìáʾ£¬Èç¹û²»Ê¹Óö¨Ê±Æ÷£¬Ö±½ÓÔÚButtonµÄonClickedʼþÖе÷ÓÃsearchFinger()·½·¨£¬ÕâÁ½ÐÐÏûÏ¢Ìáʾ¶¼»áÒ»Ö±µÈµ½searchFinger()·½·¨½áÊøºó²Å´òÓ¡µ½½çÃæÉÏ¡£

QML¶¨ÒåC++Àà¶ÔÏó¼°µ÷ÓÃÆä·½·¨

×îºó×ÅÖØ½²½âÒ»ÏÂQMLÓëC++½»»¥µÄ·½Ê½£¬ÎÒÃǵÄÖ¸ÎÆ½çÃæ»áµ÷ÓôóÁ¿µÄºǫ́C++´úÂ룬ÕâЩC++´úÂ븺ÔðÓëÖ¸ÎÆÄ£¿éÓ²¼þÉ豸½øÐÐͨÐÅ£¬ÏÔÈ»ÕâÖÖ¸´ÔÓµÄͨÐźͺ¯Êýµ÷ÓÃʱQMLÕâÖÖ½çÃæÃèÊöÓïÑÔÎÞ·¨Ê¤Èεģ¬ËäÈ»QML¿ÉÒÔÓÐһЩ¼òµ¥µÄGUI½»»¥Âß¼­º¯Êý£¬µ«´ó¶àµÄÍøÂçͨÐÅ¡¢Êý¾Ý¿â½»»¥¡¢¸´ÔÓµÄËã·¨ÎÒÃÇÖ»ÄÜʹÓÃC++À´Íê³É¡£

Ê×ÏÈÎÒÃǽ«ÐèÒªÔÚC++ÖÐÍê³ÉµÄһϵÁÐÈÎÎñʹÓÃOOPµÄ˼Ï룬·â×°³ÉÒ»¸öÀ࣬±ÈÈçÎÒÕâÀïÐèÒª½«ÓÚÖ¸ÎÆ½»»¥µÄËùÓз½·¨Éè¼Æµ½Ò»¸öÀàÖУ¬ÏÂÃæÊÇÕâ¸öÀàµÄʵÏÖ£º

#ifndef FINGERMODUAL_H
#define FINGERMODUAL_H

#include <QObject>
#include <QList>
#include <ShlObj.h>

#include "ARITH_LIB.h"
#include "Protocol.h"
#include "finger.h"
#include "daowrap.h"

#ifndef __UCHAR__
#define uchar unsigned char
#endif

#pragma comment(lib,"user32.lib")
#pragma comment(lib,"D:\\workspace-npm\\fingure\\cpp-backup\\ARITH_LIB.lib")
#pragma comment(lib,"D:\\workspace-npm\\fingure\\cpp-backup\\SynoAPIEx.lib")

//QMLÖÐʹÓÃC++¶ÔÏóºÍ·½·¨
class FingerModual : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<QObject*> objFingerList READ objFingerList)
Q_PROPERTY(QString searchName READ searchName)
Q_PROPERTY(QString returnFid READ returnFid)
public:
FingerModual();
Q_INVOKABLE uchar connect();
Q_INVOKABLE int input1();
Q_INVOKABLE int input2(int power, QString name);
Q_INVOKABLE int buildFingerList();
Q_INVOKABLE int search();
Q_INVOKABLE int deleteFingerAddress(int);
Q_INVOKABLE int backupFingerAddress();
Q_INVOKABLE int restoreFingerAddress();

QString searchName(){return m_searchName;}
QString returnFid(){return m_returnFid;}

QList<QObject*> objFingerList(){return this->fingerList;}
signals:

public slots:

private:
HANDLE pHandle = NULL;
//QMLÖÐʹÓÃQListµÄ·½·¨£¬½«Ô­Ðͽµ¼¶ÎªQObject¼´¿É
QList<QObject*> fingerList;
QString m_searchName;
QString m_returnFid;
DaoWrap* dao;
int backupFingerAddress(int fid);
int clear(); //Çå¿ÕÖ¸ÎÆÄ£¿éÊý¾Ý
};

#endif // FINGERMODUAL_H

ÉÏÃæÕâ¸öÍ·Îļþ£¬ÖªÊ¶µãʵÔÚÌ«¶à£¬Èç¹û¶ÔC++ºÍQtÒ»µã»ù´¡ÖªÊ¶¶¼Ã»Óеϰ£¬Àí½âÆðÀ´»áÓÐһЩÀ§ÄÑ¡£ÎÒÕâÀïÑÔ¼òÒâêà½âÊÍһϣº

ÕâÀﶨÒåÁËÒ»¸öFingerModualÀ࣬¼Ì³ÐÁËQtÖеÄQObjectÀ࣬ҪÏëÔÚQMLʹÓÃÎÒÃǵÄÀ࣬±ØÐ뽫ÎÒÃǵÄÀà¼Ì³ÐQObject¡£

#pragma commentÕâ¸öÊÇʹÓõÚÈý·½¿âµÄÓï·¨£¬ÎÒÃÇÕâÀïʹÓÃÁ˵ÚÈý·½µÄÖ¸ÎÆÉ豸º¯Êý¿â£¬Õâ¸öº¯Êý¿âÌṩÁËÁ½¸ölibÎļþ£ºARITH_LIB.lib,SynoAPIEx.lib,ºÍÁ½¸öÍ·Îļþ£ºARITH_LIB.h,Protocol.h"£¬ÕâÀï¾Í²»Õ¹¿ª½²ÁË¡£

ÔÚÕâ¸öÀàÖУ¬Èç¹ûÎÒÃǶ¨ÒåһЩ±äÁ¿£¬ÐèÒªÈÃQML·ÃÎÊ£¬ÔòʹÓÃÕâÖÖ·½Ê½¶¨Ò壺Q_PROPERTY(QString searchName READ searchName)£¬Õâ¾Í¶¨ÒåÁËÒ»¸ösearchName¶ÔÏó¹©QML·ÃÎÊ£¬ÔÚÕâÀïÖ»¶¨ÒåÁËREAD·½·¨£¬±íʾ¶ÔÓÚQMLÀ´Ëµ£¬Õâ¸ö±äÁ¿ÊÇÖ»¶ÁµÄ£¬²¢Ã»ÓÐд²Ù×÷£¬Èç¹ûÄãÐèÒªÈÃQMLÒ²ÄÜÉèÖÃsearchNameÖµ£¬ÔòÐèÒªÌí¼ÓÉÏWRITE±êÖ¾¡£

ͬʱ£¬Èç¹ûÎÒÃÇÐèÒª¶¨ÒåһЩ·½·¨£¬¹©Ç°¶ËQMLµ÷Ó㬲¢ÇÒÔÙÀ´µã²ÎÊýºÍ·µ»ØÖµ£¬ÄÇÎÒÃÇ¿ÉÒÔÕâô¶¨Ò壺Q_INVOKABLE int input2(int power, QString name)Õâ¸öºÜ¼òµ¥£¬Ö»ÐèÒª¸ø·½·¨´òÉÏQ_INVOKABLE±êÖ¾¾ÍÐÐÁË£¬»ù±¾ÀàÐͰüÀ¨QString£¬¿ÉÒÔÖ±½ÓÔÚQML´«Èë¡£

ÔÚpublicÓò£¬ÎÒÃÇ»¹ÐèҪʵÏÖÉÏÃæQ_PROPERTY(QString searchName READ searchName)ËùÃèÊöµÄsearchName()·½·¨£¬»ù±¾ÉϾÍÊÇ·µ»ØÕæÊµµÄprivate˽ÓбäÁ¿£¬ÕâЩ¹æ·¶ÓеãÀàËÆÓÚJAVAµÄsetter&getterº¯ÊýµÄ¹æ·¶£¬²»Õ¹¿ª½²¡£

ÖÁ´Ë£¬Õâôһ¸öÀà¾Í¶¨ÒåºÃÁË£¬ÄÇôÈçºÎÔÚQMLʹÓÃÄØ£º

QML¹¤³ÌµÄÈë¿Úº¯Êýmain.cpp£º

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QIcon>
#include <QQmlContext>

#include "fingermodual.h"
#include "finger.h"

int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHigh

DpiScaling);
QGuiApplication app(argc, argv);
app.setWindowIcon(QIcon(":/images/finger.png"));


qmlRegisterType<Finger>("com.newflypig.Finger", 1, 0, "Finger");
qmlRegisterType<FingerModual>("com.newflypig.

FingerModual", 1, 0, "FingerModual");

QQmlApplicationEngine engine;
FingerModual fingerModual;
engine.rootContext()->setContextProperty

("fingerModual", &fingerModual);

engine.load(QUrl(QLatin1String("qrc:/main.qml")));

return app.exec();
}

¹Û²ìµÚ17ºÍ21ÐÐ

17ÐÐÊ×ÏÈͨ¹ý×¢²áº¯ÊýqmlRegisterType()½«ÎÒÃÇдºÃµÄFingerModualÀà×¢²á¸øqml£¬×¢²áµÄÃû³Æ£¬´ó°æ±¾£¬Ð¡°æ±¾ÕâЩ¶¼¿ÉÒÔ×ÔÓÉÉèÖÃ

21ÐÐͨ¹ýengine.rootContext()->setContextProperty()½«Ò»¸öÒѾ­¹¹ÔìºÃµÄfingerModual¶ÔÏó×¢Èë¸øÁËQML engineµÄÉÏÏÂÎÄ£¬ÕâÑù£¬ÎÒÃÇÔÚmain.qmlÖоͿÉÒÔˬ¿ìµÄÖ±½ÓʹÓÃfingerModual±äÁ¿ÁË£¬²Î¿¼main.qmlµÚÒ»´Î³öÏÖfingerModualµÄ91ÐУ¬ÊDz»ÊÇÖ±½Ó¾ÍÓ㬲»ÐèÒª¶¨ÒåºÍ¹¹ÔìÁË£¬ÕâÒ»µãµ¹ÊÇͻȻÈÃÎÒÏëµ½ÊDz»ÊÇÓеãÀàËÆJavaÖеÄSpring×¢Èë¡£

   
5176 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì