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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Qt Quick ×é¼þÓë¶ÔÏó¶¯Ì¬´´½¨Ïê½â£¨Ò»£©
 
×÷Õß WPJYµÄ²©¿Í£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-08-11
  3975  次浏览      27
 

Components£¨×é¼þ£©

Component ÊÇÓÉ Qt ¿ò¼Ü»ò¿ª·¢Õß·â×°ºÃµÄ¡¢Ö»±©Â¶Á˱ØÒª½Ó¿ÚµÄ QML ÀàÐÍ£¬¿ÉÒÔÖØ¸´ÀûÓá£Ò»¸ö QML ×é¼þ¾ÍÏñÒ»¸öºÚºÐ×Ó£¬Ëüͨ¹ýÊôÐÔ¡¢Ðźš¢º¯ÊýºÍÍⲿÊÀ½ç½»»¥¡£

Ò»¸ö Component ¼´¿ÉÒÔ¶¨ÒåÔÚ¶ÀÁ¢µÄ qml ÎļþÖУ¬Ò²¿ÉÒÔǶÈëµ½ÆäËüµÄ qml ÎĵµÖÐÀ´¶¨Ò塣ͨ³£ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÕâ¸öÔ­ÔòÀ´Ñ¡Ôñ½«Ò»¸ö Component ¶¨ÒåÔÚÄÄÀÈç¹ûÒ»¸ö Component ±È½ÏСÇÒÖ»ÔÚij¸ö qml ÎĵµÖÐʹÓûòÕßÒ»¸ö Component ´ÓÂß¼­ÉÏ¿´´ÓÊôÓÚij¸ö qml Îĵµ£¬ÄǾͿÉÒÔ²ÉÓÃǶÈëµÄ·½Ê½À´¶¨Òå¸Ã Component ¡£ÄãÒ²¿ÉÒÔÓë C++ µÄǶÌ×Àà¶Ô±ÈÀ´Àí½â¡£

ǶÈëʽ¶¨Òå×é¼þ

¡¶Qt Quick ʼþ´¦ÀíÖ®ÐźÅÓë²Û¡·Ò»ÎÄÖÐʹÓõ½ Component µÄʾÀý QML ´úÂëÈçÏ£º

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
width: 320;
height: 240;
color: "#C0C0C0";

Text {
id: coloredText;
anchors.horizontalCenter: parent.horizontalCenter;
anchors.top: parent.top;
anchors.topMargin: 4;
text: "Hello World!";
font.pixelSize: 32;
}

Component {
id: colorComponent;
Rectangle {
id: colorPicker;
width: 50;
height: 30;
signal colorPicked(color clr);
MouseArea {
anchors.fill: parent
onPressed: colorPicker.colorPicked(colorPicker.color);
}
}
}

Loader{
id: redLoader;
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
sourceComponent: colorComponent;
onLoaded:{
item.color = "red";
}
}

Loader{
id: blueLoader;
anchors.left: redLoader.right;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
sourceComponent: colorComponent;
onLoaded:{
item.color = "blue";
}
}

Connections {
target: redLoader.item;
onColorPicked:{
coloredText.color = clr;
}
}

Connections {
target: blueLoader.item;
onColorPicked:{
coloredText.color = clr;
}
}
}

ÆäÖУ¬ÑÕɫѡÔñ×é¼þµÄ¶¨Òå´úÂëÈçÏ£º

    Component {
id: colorComponent;
Rectangle {
id: colorPicker;
width: 50;
height: 30;
signal colorPicked(color clr);
MouseArea {
anchors.fill: parent
onPressed: colorPicker.colorPicked(colorPicker.color);
}
}
}

ÈçÄãËù¼û£¬ÒªÔÚÒ»¸ö QML ÎĵµÖÐǶÈë Component µÄ¶¨Ò壬ÐèҪʹÓà Component ¶ÔÏó¡£

¶¨ÒåÒ»¸ö Component Ó붨ÒåÒ»¸ö QML ÎĵµÀàËÆ£¬ Component Ö»Äܰüº¬Ò»¸ö¶¥²ã item £¬¶øÇÒÔÚÕâ¸ö item Ö®Íâ²»Äܶ¨ÒåÈκÎÊý¾Ý£¬³ýÁË id ¡£±ÈÈçÉÏÃæµÄ´úÂëÖУ¬¶¥²ã item ÊÇ Rectangle ¶ÔÏó£¬ÔÚ Rectangle Ö®ÍâÎÒ¶¨ÒåÁË id ÊôÐÔ£¬ÆäֵΪ colorComponent ¡£¶ø¶¥²ã item Ö®ÄÚ£¬Ôò¿ÉÒÔ°üº¬¸ü¶àµÄ×ÓÔªËØÀ´Ð­Í¬¹¤×÷£¬×îÖÕÐγÉÒ»¸ö¾ßÓÐÌØ¶¨¹¦ÄܵÄ×é¼þ¡£

Component ͨ³£ÓÃÀ´¸øÒ»¸ö view ÌṩͼÐλ¯×é¼þ£¬±ÈÈç ListView::delegate ÊôÐÔ¾ÍÐèÒªÒ»¸ö Component À´Ö¸¶¨ÈçºÎÏÔʾÁбíµÄÿһ¸öÏÓÖ±ÈÈç ButtonStyle::background ÊôÐÔÒ²ÐèÒªÒ»¸ö Component À´Ö¸¶¨ÈçºÎ»æÖÆ Button µÄ±³¾°¡£

Component ²»ÊÇ Item µÄÅÉÉúÀ࣬¶øÊÇ´Ó QQmlComponent ¼Ì³Ð¶øÀ´£¬ËäÈ»Ëüͨ¹ý×Ô¼ºµÄ¶¥²ã item ΪÆäËüµÄ view Ìṩ¿ÉÊÓ»¯×é¼þ£¬µ«Ëü±¾ÉíÊDz»¿É¼ûÔªËØ¡£Äã¿ÉÒÔÕâôÀí½â£ºÄ㶨ÒåµÄ×é¼þÊÇÒ»¸öеÄÀàÐÍ£¬Ëü±ØÐ뱻ʵÀý»¯ÒÔºó²Å¿ÉÄÜÏÔʾ¡£¶øÒªÊµÀý»¯Ò»¸öǶÈëÔÚ qml ÎĵµÖж¨ÒåµÄ×é¼þ£¬Ôò¿ÉÒÔͨ¹ý Loader ¡£ºóÃæÎÒÃÇÏêϸ½²Êö Loader £¬ÕâÀïÏȰ´Ï²»±í£¬ÎÒÃÇÒªÀ´¿´ÈçºÎÔÚÒ»¸öÎļþÖж¨Òå×é¼þÁË¡£

ÔÚµ¥¶ÀÎļþÖж¨Òå×é¼þ

ºÜ¶àʱºòÎÒÃǰÑÒ»¸ö Component µ¥¶À¶¨ÒåÔÚÒ»¸ö qml ÎĵµÖУ¬±ÈÈç Qt Quick ÌṩµÄ BusyIndicator ¿Ø¼þ£¬Æäʵ¾ÍÊÇÔÚ BusyIndicator.qml Öж¨ÒåµÄÒ»¸ö×é¼þ¡£ÏÂÃæÊÇ BusyIndicator.qml ÎļþµÄÄÚÈÝ£º

Control {
id: indicator
property bool running: true
Accessible.role: Accessible.Indicator
Accessible.name: "busy"
style: Qt.createComponent(Settings.style + "/BusyIndicatorStyle.qml", indicator)
}

ÎÒÔÚ¡¶Qt Quick ¼òµ¥½Ì³Ì¡·Ò»ÎÄÖеÄÏÔÊ¾ÍøÂçͼƬʵÀýÖУ¬Ê¹ÓÃÁË BusyIndicator À´ÌáʾÓû§Í¼Æ¬ÕýÔÚ¼ÓÔØÖÐÐèÒªµÈºò£¬Äã¿ÉÒÔÌø×ªµ½ÄÇÆªÎÄÕÂѧϰ BusyIndicator µÄÓ÷¨¡£

BusyIndicator ×é¼þµÄ´úÂë·Ç³£¼òµ¥£¬Ö»ÊǸø Control ÔªËØ£¨Qt Quick ¶¨ÒåµÄ˽ÓÐÔªËØ£¬ÓÃ×÷ÆäËü¿Ø¼þµÄ»ùÀ࣬Èç ComboBox ¡¢ BusyIndicator µÈ£©Ôö¼ÓÁËÒ»¸öÊôÐÔ¡¢ÉèÖÃÁ˼¸¸öÊôÐÔµÄÖµ£¬½ö´Ë¶øÒÑ¡£

²»ÖªÄãÊÇ·ñ×¢Òâµ½ÁË£¬ BusyIndicator.qml ÎļþÖеĶ¥²ã item ÊÇ Control £¬¶øÎÒÃÇʹÓÃʱȴÊÇÒÔ BusyIndicator Ϊ×é¼þÃû£¨ÀàÃû£©¡£ÕâÊÇÎÒÃǶ¨Òå Component ʱҪ×ñÊØµÄÒ»¸öÔ¼¶¨£º×é¼þÃû×Ö±ØÐëºÍ qml ÎļþÃûÒ»Ö¡£ºÃÂºÍ Java Ò»ÑùÀ²£¬ÀàÃû¾ÍÊÇÎļþÃû¡£»¹ÓÐÒ»µã£¬×é¼þÃû×ֵĵÚÒ»¸ö×Öĸ±ØÐëÊÇ´óд¡£¶ÔÓÚÔÚÎļþÖж¨ÒåÒ»¸ö×é¼þ£¬¾ÍÕâô¼òµ¥ÁË£¬ÔÙûÓÐÆäËüµÄÌØÊâÒªÇó¡£ Qt Quick ÌṩµÄ¶àÊý»ù±¾ÔªËغÍÌØÐÔ£¬Äã¶¼¿ÉÒÔÔÚ¶¨Òå×é¼þʱʹÓá£

Ò»µ©ÄãÔÚÎļþÖж¨ÒåÁËÒ»¸ö×é¼þ£¬¾Í¿ÉÒÔÏñʹÓñê×¼ Qt Quick ÔªËØÒ»ÑùʹÓÃÄãµÄ×é¼þ¡£±ÈÈçÎÒÃǸøÑÕɫѡÔñ×é¼þÆð¸öÃû×ֽРColorPicker £¬¶ÔÓ¦µÄ qml ÎļþΪ ColorPicker.qml £¬ÄÇôÄã¾Í¿ÉÒÔÔÚÆäËü QML ÎĵµÖÐʹÓà ColorPicker {...} À´¶¨Òå ColorPicker µÄʵÀý¡£

ºÃÀ²£¬ÏÖÔÚÈÃÎÒÃÇÀ´¿´¿´ÔÚµ¥¶ÀÎļþÖж¨ÒåµÄ ColorPicker ×é¼þ£º

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
id: colorPicker;
width: 50;
height: 30;
signal colorPicked(color clr);

function configureBorder(){
colorPicker.border.width = colorPicker.focus ? 2 : 0;
colorPicker.border.color = colorPicker.focus ? "#90D750" : "#808080";
}

MouseArea {
anchors.fill: parent
onClicked: {
colorPicker.colorPicked(colorPicker.color);
mouse.accepted = true;
colorPicker.focus = true;
}
}
Keys.onReturnPressed: {
colorPicker.colorPicked(colorPicker.color);
event.accepted = true;
}
Keys.onSpacePressed: {
colorPicker.colorPicked(colorPicker.color);
event.accepted = true;
}

onFocusChanged: {
configureBorder();
}

Component.onCompleted: {
configureBorder();
}
}

Çë×¢ÒâÉÏÃæµÄ´úÂ룬ËüºÍǶÈëʽ¶¨ÒåÓÐÃ÷ÏÔ²»Í¬£º Component ¶ÔÏó²»¼ûßÖ£¡¶Ô£¬¾ÍÊǽ´×ϵΣºÔÚµ¥¶ÀÎļþÄÚ¶¨Òå×é¼þ£¬²»ÐèÒª Component ¶ÔÏó£¬Ö»ÓÐÔÚÆäËü QML ÎĵµÖÐǶÈëʽ¶¨Òå×é¼þʱ²ÅÐèÒª Component ¶ÔÏó¡£ÁíÍ⣬ΪÁËÄܹ»Èöà¸ö ColorPicker ×é¼þ¿ÉÒÔÕý³£µÄÏÔʾ½¹µã¿ò£¬ÎÒ»¹Ê¹ÓÃÁË onClicked ÐźŴ¦ÀíÆ÷£¬ÐÂÔöÁË onFocusChanged ÐźŴ¦ÀíÆ÷£¬ÔÚËüÃǵÄʵÏÖÖе÷Óà configureBorder() º¯ÊýÀ´ÖØÐÂÉèÖñ߿òµÄ¿í¶ÈºÍÑÕÉ«£¬ÐÂÔö onReturnPressed ºÍ onSpacePressed ÒÔ±ãÏìÓ¦»Ø³µºÍ¿Õ¸ñÁ½¸ö°´¼ü¡£

Äã¿ÉÒÔʹÓà Item »òÆäÅÉÉúÀà×÷Ϊ×é¼þµÄ¸ù item ¡£ ColorPicker ×é¼þʹÓà Rectangle ×÷Ϊ¸ù Item ¡£ÏÖÔÚÈÃÎÒÃÇ¿´¿´ÈçʵÔÚÆäËüÎļþÖÐʹÓÃж¨ÒåµÄ ColorPicker ×é¼þ¡£ÎÒÐÞ¸ÄÁËÉϽڵÄʾÀý£¬Ð嵀 qml Îļþ±»ÎÒÃüÃûΪ component_file.qml £¬ÄÚÈÝÈçÏ£º

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
width: 320;
height: 240;
color: "#EEEEEE";

Text {
id: coloredText;
anchors.horizontalCenter: parent.horizontalCenter;
anchors.top: parent.top;
anchors.topMargin: 4;
text: "Hello World!";
font.pixelSize: 32;
}

function setTextColor(clr){
coloredText.color = clr;
}

ColorPicker {
id: redColor;
color: "red";
focus: true;
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
KeyNavigation.right: blueColor;
KeyNavigation.tab: blueColor;
onColorPicked:{
coloredText.color = clr;
}
}

ColorPicker {
id: blueColor;
color: "blue";
anchors.left: redColor.right;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
KeyNavigation.left: redColor;
KeyNavigation.right: pinkColor;
KeyNavigation.tab: pinkColor;
}

ColorPicker {
id: pinkColor;
color: "pink";
anchors.left: blueColor.right;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
KeyNavigation.left: blueColor;
KeyNavigation.tab: redColor;
}

Component.onCompleted:{
blueColor.colorPicked.connect(setTextColor);
pinkColor.colorPicked.connect(setTextColor);
}
}

¿ÉÒÔ¿´µ½£¬ component_file.qml ʹÓà ColorPicker ×é¼þµÄ·½Ê½ÓëʹÓà Rectangle ¡¢ Button ¡¢ Text µÈ±ê×¼ Qt Quick ×é¼þÍêȫһÖ£º¿ÉÒÔ¸ø×é¼þÖ¸¶¨Î¨Ò»µÄ id £¬¿ÉÒÔʹÓÃê²¼¾Ö£¬¿ÉÒÔʹÓà KeyNavigation ¸½¼ÓÊôÐÔ¡­¡­×ÜÖ®£¬×Ô¶¨ÒåµÄ×é¼þºÍ Qt Quick ×é¼þ²¢ÎÞ±¾Öʲ»Í¬¡£²»¹ýÐèҪעÒâµÄÊÇ£¬×é¼þʵÀýµÄ id ºÍ×é³É×é¼þµÄ¶¥²ã item µÄ id ÊǸ÷×Ô¶ÀÁ¢µÄ£¬ÒÔÉÏÃæµÄÀý×ÓÀ´¿´£¬ redColor ºÍ colorPicker ÊÇÁ½¸ö²»Í¬µÄ id £¬Ç°ÕßÖ¸´ú×é¼þ¶ÔÏó£¨ËäÈ»×é¼þµÄ¶¨ÒåûÓÐʹÓà Component £©£¬ºóÕßÖ¸´ú ColorPicker µÄ Rectangle ¶ÔÏó¡£

ÉÏÃæµÄ´úÂ뻹ÑÝʾÁ½ÖÖʹÓà qml ×Ô¶¨ÒåÐźŵķ½Ê½£¬ redColor ʹÓÃÐźŴ¦ÀíÆ÷£¬ greeColor ºÍ pinkColor ÔòʹÓÃÁË signal ¶ÔÏóµÄ connect() ·½·¨Á¬½Óµ½ setTextColor() ·½·¨ÉÏ¡£

ÎÒ°Ñ ColorPicker.qml ºÍ component_file.qml ·ÅÔÚͬһ¸öÎļþÏÂÃæ£¬·ñÔò¿ÉÄܻᱨ´í¡£Í¼ 1 ÊÇÔËÐÐ "qmlscene component_file.qml" ÃüÁî µÄЧ¹û£º

ͼ 1 ÔÚÎļþÖж¨Òå×é¼þ²¢Ê¹ÓÃ

¶ÔÓÚ¶¨ÒåÔÚµ¥¶ÀÎļþÖÐµÄ Component £¬³ýÁË¿ÉÒÔÏñ¸Õ¸Õ½éÉܵÄÄÇÑùʹÓã¬Ò²¿ÉÒÔʹÓà Loader À´¶¯Ì¬¼ÓÔØ£¬¸ù¾ÝÐèÒªÔÙ´´½¨¶ÔÏó¡£ÏÂÃæÎÒÃǾÍÀ´¿´ Loader ¾¿¾¹ÊǺη½Ñý¹Ö¡£

ʹÓà Loader

Loader µÄÏêϸ½éÉÜ

Loader ÓÃÀ´¶¯Ì¬¼ÓÔØ QML ×é¼þ¡£

Loader ¿ÉÒÔʹÓÃÆä source ÊôÐÔ¼ÓÔØÒ»¸ö qml Îĵµ£¬Ò²¿ÉÒÔͨ¹ýÆä sourceComponent ÊôÐÔ¼ÓÔØÒ»¸ö Component ¶ÔÏó¡£µ±ÄãÐèÒªÑÓ³ÙһЩ¶ÔÏóÖ±µ½ÕæÕýÐèÒª²Å´´½¨ËüÃÇʱ£¬ Loader ·Ç³£ÓÐÓᣠµ± Loader µÄ source »ò sourceComponent ÊôÐÔ·¢Éú±ä»¯Ê±£¬Ëü֮ǰ¼ÓÔØµÄ Component »á×Ô¶¯Ïú»Ù£¬Ð¶ÔÏó»á±»¼ÓÔØ¡£½« source ÉèÖÃΪһ¸ö¿Õ×Ö·û´®»ò½« sourceComponent ÉèÖÃΪ undefined £¬½«»áÏú»Ùµ±Ç°¼ÓÔØµÄ¶ÔÏó£¬Ïà¹ØµÄ×ÊÔ´Ò²»á±»ÊÍ·Å£¬¶ø Loader ¶ÔÏóÔò±ä³ÉÒ»¸ö¿Õ¶ÔÏó¡£

Loader µÄ item ÊôÐÔÖ¸ÏòËü¼ÓÔØµÄ×é¼þµÄ¶¥²ã item £¬±ÈÈç Loader ¼ÓÔØÁËÎÒÃǵÄÑÕɫѡÔñ×é¼þ£¬Æä item ÊôÐÔ¾ÍÖ¸ÏòÑÕɫѡÔñ×é¼þµÄ Rectangle ¶ÔÏó¡£¶ÔÓÚ Loader ¼ÓÔØµÄ item £¬Ëü±©Â¶³öÀ´µÄ½Ó¿Ú£¬ÈçÊôÐÔ¡¢Ðźŵȣ¬¶¼¿ÉÒÔͨ¹ý Loader µÄ item ÊôÐÔÀ´·ÃÎÊ¡£ËùÒÔÎÒÃDzſÉÒÔÕâôʹÓãº

    Loader{
id: redLoader;
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
sourceComponent: colorComponent;
onLoaded:{
item.color = "red";
}
}

ÉÏÃæµÄ´úÂëÔÚ Loader ¶ÔÏóʹÓà sourceComponent ÊôÐÔÀ´¼ÓÔØ id Ϊ colorComponent µÄ×é¼þ¶ÔÏó£¬È»ºóÔÚ onLoaded ÐźŴ¦ÀíÆ÷ÖÐʹÓà item ÊôÐÔÀ´ÉèÖÃÑÕɫѡÔñ×é¼þµÄÑÕÉ«¡£¶ÔÓÚÐźŵķÃÎÊ£¬ÎÒÃÇÔò¿ÉÒÔʹÓà Connections ¶ÔÏó£¬ÈçÏÂÃæµÄ qml ´úÂëËùʾ£º

    Connections {
target: redLoader.item;
onColorPicked:{
coloredText.color = clr;
}
}

ÎÒÃÇ´´½¨µÄ Connections ¶ÔÏ󣬯ä target Ö¸Ïò redLoader.item £¬¼´Ö¸ÏòÑÕɫѡÔñ×é¼þµÄ¶¥²ã item ¡ª¡ª Rectangle £¬ËùÒÔ¿ÉÒÔÖ±½ÓÏìÓ¦ËüµÄ colorPicked Ðźš£

ËäÈ» Loader ±¾ÉíÊÇ Item µÄÅÉÉúÀ࣬µ«Ã»ÓмÓÔØ Component µÄ Loader ¶ÔÏóÊDz»¿É¼ûµÄ£¬Ã»Ê²Ã´Êµ¼ÊµÄÒâÒå¡£¶øÒ»µ©Äã¼ÓÔØÁËÒ»¸ö Component £¬ Loader µÄ´óС¡¢Î»ÖõÈÊôÐÔÈ´¿ÉÒÔÓ°ÏìËüËù¼ÓÔØµÄ Component ¡£Èç¹ûÄãûÓÐÏÔʽָ¶¨ Loader µÄ´óС£¬ÄÇô Loader »á½«×Ô¼ºµÄ³ß´çµ÷ÕûΪÓëËü¼ÓÔØµÄ¿É¼û item µÄ³ß´çÒ»Ö£»Èç¹û Loader µÄ´óСͨ¹ý width ¡¢ height »ò ê²¼¾ÖÏÔʽÉèÖÃÁË£¬ÄÇôËü¼ÓÔØµÄ¿É¼û item µÄ³ß´ç»á±»µ÷ÕûÒÔ±ãÊÊÓ¦ Loader µÄ´óС¡£²»¹ÜÊÇÄÄÖÖÇé¿ö£¬ Loader ºÍËüËù¼ÓÔØµÄ item ¾ßÓÐÏàͬµÄ³ß´ç£¬ÕâÈ·±£ÄãʹÓÃêÀ´²¼¾Ö Loader ¾ÍµÈͬÓÚ²¼¾ÖËü¼ÓÔØµÄ item ¡£

ÎÒÃǸıäÒ»ÏÂÑÕɫѡÔñÆ÷ʾÀýµÄ´úÂ룬Á½¸ö Loader ¶ÔÏó£¬Ò»¸öÉèÖóߴçÒ»¸ö²»ÉèÖ㬿´¿´ÊÇʲôЧ¹û¡£Ð嵀 qml ÎĵµÎÒÃÇÃüÃûΪ loader_test.qml £¬ÄÚÈÝÈçÏ£º

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
width: 320;
height: 240;
color: "#C0C0C0";

Text {
id: coloredText;
anchors.horizontalCenter: parent.horizontalCenter;
anchors.top: parent.top;
anchors.topMargin: 4;
text: "Hello World!";
font.pixelSize: 32;
}

Component {
id: colorComponent;
Rectangle {
id: colorPicker;
width: 50;
height: 30;
signal colorPicked(color clr);
MouseArea {
anchors.fill: parent
onPressed: colorPicker.colorPicked(colorPicker.color);
}
}
}

Loader{
id: redLoader;
width: 80; // [1]
height: 60;// [2]
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
sourceComponent: colorComponent;
onLoaded:{
item.color = "red";
}
}

Loader{
id: blueLoader;
anchors.left: redLoader.right;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
sourceComponent: colorComponent;
onLoaded:{
item.color = "blue";
}
}

Connections {
target: redLoader.item;
onColorPicked:{
coloredText.color = clr;
}
}

Connections {
target: blueLoader.item;
onColorPicked:{
coloredText.color = clr;
}
}
}

×¢ÒâÉÏÃæµÄ´úÂëÖеÄ×¢ÊÍ£¬·½À¨ºÅ±ê×¼µÄ 2 ´¦Ð޸ģ¬ÉèÖÃÁ˺ìÉ« Loader µÄ³ß´ç£¬Ð§¹ûÈçͼ 1 Ëùʾ£º

ͼ 2 Loader ³ß´ç

Èç¹û Loader ¼ÓÔØµÄ item Ïë´¦Àí°´¼üʼþ£¬ÄÇô±ØÐ뽫 Loader ¶ÔÏóµÄ focus ÊôÐÔÖà true ¡£ÓÖÒòΪ Loader ±¾ÉíÒ²ÊÇÒ»¸ö½¹µãÃô¸ÐµÄ¶ÔÏó£¬ËùÒÔÈç¹ûËü¼ÓÔØµÄ item ´¦ÀíÁ˰´¼üʼþ£¬Ó¦µ±½«Ê¼þµÄ accepted ÊôÐÔÖà true £¬ÒÔÃâÒѾ­±»³ÔµôµÄʼþÔÙ´«µÝ¸ø Loader ¡£ÎÒÃÇÀ´ÐÞ¸ÄÏ loader_test.qml £¬¼ÓÈë¶Ô½¹µãµÄ´¦Àí£¬µ±Ò»¸öÑÕÉ«×é¼þÓµÓн¹µãʱ£¬»æÖÆÒ»¸ö±ß¿ò£¬´ËʱÈç¹ûÄã°´Ï»سµ»ò¿Õ¸ñ¼ü£¬»á´¥·¢Æä colorPicked Ðźš£Í¬Ê±ÎÒÃÇÒ²´¦Àí×óÓÒ¼ü£¬ÔÚ²»Í¬µÄÑÕɫѡÔñ×é¼þÖ®¼äÇл»½¹µã¡£½«Ð´úÂëÃüÃûΪ loader_focus.qml £¬ÄÚÈÝÈçÏ£º

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
width: 320;
height: 240;
color: "#EEEEEE";

Text {
id: coloredText;
anchors.horizontalCenter: parent.horizontalCenter;
anchors.top: parent.top;
anchors.topMargin: 4;
text: "Hello World!";
font.pixelSize: 32;
}

Component {
id: colorComponent;
Rectangle {
id: colorPicker;
width: 50;
height: 30;
signal colorPicked(color clr);
property Item loader;
border.width: focus ? 2 : 0;
border.color: focus ? "#90D750" : "#808080";
MouseArea {
anchors.fill: parent
onClicked: {
colorPicker.colorPicked(colorPicker.color);
loader.focus = true;
}
}
Keys.onReturnPressed: {
colorPicker.colorPicked(colorPicker.color);
event.accepted = true;
}
Keys.onSpacePressed: {
colorPicker.colorPicked(colorPicker.color);
event.accepted = true;
}
}
}

Loader{
id: redLoader;
width: 80;
height: 60;
focus: true;
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
sourceComponent: colorComponent;
KeyNavigation.right: blueLoader;
KeyNavigation.tab: blueLoader;

onLoaded:{
item.color = "red";
item.focus = true;
item.loader = redLoader;
}
onFocusChanged:{
item.focus = focus;
}
}

Loader{
id: blueLoader;
anchors.left: redLoader.right;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
sourceComponent: colorComponent;
KeyNavigation.left: redLoader;
KeyNavigation.tab: redLoader;

onLoaded:{
item.color = "blue";
item.loader = blueLoader;
}
onFocusChanged:{
item.focus = focus;
}
}
Connections {
target: redLoader.item;
onColorPicked:{
coloredText.color = clr;
}
}

Connections {
target: blueLoader.item;
onColorPicked:{
coloredText.color = clr;
}
}
}

Ê×ÏÈÎÒÈÃÑÕɫѡÔñ×é¼þ´¦Àí°´¼üʼþ£¨ÈçÍü¼ÇÇë²Î¿´¡¶Qt Quickʼþ´¦ÀíÖ®Êó±ê¡¢¼üÅÌ¡¢¶¨Ê±Æ÷¡·£©£¬ÊÕµ½»Ø³µºÍ¿Õ¸ñ¼üʱ·¢³ö colorPicked Ðźš£ÎÒ»¹¸øÑÕɫѡÔñ×é¼þ¶¨ÒåÁËÒ»¸öÃûΪ loader µÄÊôÐÔ£¬ÒÔ±ãÊó±êµã»÷ÑÕɫѡÔñ×é¼þʱ¿ÉÒԸıä Loader ¶ÔÏóµÄ½¹µãÊôÐÔ¡£ÎÒÃÇÔÚ Loader µÄ onLoaded ÐźŴ¦ÀíÆ÷ÖиøÑÕɫѡÔñ×é¼þµÄ loader ÊôÐÔ¸³Öµ¡£

ÑÕɫѡÔñ×é¼þ¸ù¾Ý½¹µã״̬¾ö¶¨ÊÇ·ñ»æÖƱ߿ò£¬µ±Óн¹µãʱ»æÖÆ¿í¶ÈΪ 2 µÄ±ß¿ò¡£

¶ÔÓÚ Loader £¬ÎÒÉèÖÃÁË KeyNavigation ¸½¼ÓÊôÐÔ£¬Ö¸¶¨×óÓÒ¼üºÍ tab ¼üÈçºÎÇл»½¹µã£¬¶øµ±½¹µã±ä»¯Ê±£¬Í¬²½¸Ä±äÑÕɫѡÔñ×é¼þµÄ½¹µã¡£×îºóÎÒÉèÖà redLoader ÓµÓгõʼ½¹µã¡£

ͼ 3 loaderÓë°´¼ü¡¢½¹µã

Äã¿ÉÒÔʹÓà qmlscene loader_focus.qml ÃüÁîÔËÐп´¿´Ð§¹û£¬Êó±êµã»÷ij¸öÑÕɫѡÔñ×é¼þ£¬»á´¥·¢½¹µãÇл»ºÍ±ß¿ò±ä»¯£¬×óÓÒ¼ü¡¢ tab ¼üÒ²»á´¥·¢½¹µã±ä»¯£¬¶øµ±Ò»¸öÑÕɫѡÔñ×é¼þÓµÓн¹µãʱ£¬»Ø³µ¡¢¿Õ¸ñ¼ü¶¼¿ÉÒÔ´¥·¢ "Hello World!" ¸Ä±äÑÕÉ«¡£

´ÓÎļþ¼ÓÔØ×é¼þ

֮ǰ½éÉÜ Loader ʱ£¬ÎÒÃÇÒÔǶÈëʽ¶¨ÒåµÄ Component ΪÀý×Ó˵Ã÷ Loader µÄ¸÷ÖÖÌØÐÔºÍÓ÷¨£¬ÏÖÔÚÎÒÃÇÀ´¿´ÈçºÎ´ÓÎļþ¼ÓÔØ×é¼þ¡£

¶ÔÓÚ¶¨ÒåÔÚÒ»¸ö¶ÀÁ¢ÎļþÖÐµÄ Component £¬Í¬Ñù¿ÉÒÔʹÓà Loader À´¼ÓÔØ£¬Ö»ÒªÖ¸¶¨ Loader µÄ source ÊôÐÔ¼´¿É¡£ÏÖÔÚÔÙÀ´ÐÞ¸ÄÏÂÎÒÃǵÄÀý×Ó£¬Ê¹Óà Loader À´¼ÓÔØ ColorPicker ×é¼þ¡£

Ð嵀 qml ÎĵµÎÒÃüÃûΪ loader_component_file.qml £¬ÄÚÈÝÈçÏ£º

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
width: 320;
height: 240;
color: "#EEEEEE";

Text {
id: coloredText;
anchors.horizontalCenter: parent.horizontalCenter;
anchors.top: parent.top;
anchors.topMargin: 4;
text: "Hello World!";
font.pixelSize: 32;
}

Loader{
id: redLoader;
width: 80;
height: 60;
focus: true;
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
source: "ColorPicker.qml";
KeyNavigation.right: blueLoader;
KeyNavigation.tab: blueLoader;

onLoaded:{
item.color = "red";
item.focus = true;
}

onFocusChanged:{
item.focus = focus;
}
}

Loader{
id: blueLoader;
focus: true;
anchors.left: redLoader.right;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
source: "ColorPicker.qml";
KeyNavigation.left: redLoader;
KeyNavigation.tab: redLoader;

onLoaded:{
item.color = "blue";
}

onFocusChanged:{
item.focus = focus;
}
}
Connections {
target: redLoader.item;
onColorPicked:{
coloredText.color = clr;
if(!redLoader.focus){
redLoader.focus = true;
blueLoader.focus = false;
}
}
}

Connections {
target: blueLoader.item;
onColorPicked:{
coloredText.color = clr;
if(!blueLoader.focus){
blueLoader.focus = true;
redLoader.focus = false;
}
}
}
}

´úÂëÓм¸´¦¸Ä¶¯£º

Ò»´¦Êǽ« sourceComponent ÐÞ¸ÄΪ source £¬ÆäֵΪ "ColorPicker.qml" ¡£

Ò»´¦ÊÇÁ½¸ö Connections ¶ÔÏó£¬ÔÚ onColorPicked ÐźŴ¦ÀíÆ÷ÖУ¬ÉèÖÃÁË Loader µÄ½¹µãÊôÐÔ£¬ÒòΪ Ö»ÓÐ Loader Óн¹µã£¬Ëü¼ÓÔØµÄ item ²Å»áÓн¹µã£¬Èç¹ûÄãÊó±êµã»÷ij¸öÑÕɫѡÔñ×é¼þ¶ø¼ÓÔØËüµÄ Loader ûÓн¹µã£¬ÄÇôËäÈ»ÑÕÉ«¿ÉÒԸı䣬µ«Êǽ¹µã¿ò³ö²»À´¡£

ʹÓà Loader ¼ÓÔØ¶¨ÒåÔÚ qml ÎĵµÖеÄ×é¼þ£¬±ÈÖ±½ÓʹÓÃ×é¼þÃû¹¹Ôì¶ÔÏóÒª·±ËöµÃ¶à£¬µ«Èç¹ûÄãµÄÓ¦Óûá¸ù¾ÝÌØ¶¨µÄÇé¾°À´¾ö¶¨Ä³Ð©½çÃæÔªËØÊÇ·ñÏÔʾ£¬ÕâÖÖ·½Ê½Ò²Ðí¿ÉÒÔÂú×ãÄã¡£

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

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ