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