有兩種方法可以創建,都是全局對象Qt提供的方法
一:用Qt.createComponent加載一個qml文件並創建Component
二:用Qt.createQmlObject從一個qml字符串創建Component
注意,以上兩種方法返回的是Component,Component在QML中是一種類型,參考文檔:
http://qt-project.org/doc/qt-5/qml-qtqml-component.html#details
因此還要調用Component的createObject來創建真正可用的對象。createObject第一個參數是指定掛在誰的下方,也就是父窗口是誰。如果傳遞null,則代表暫時不顯示。
如果要銷毀,只需要調用對象的destroy方法即可。
調用createObject方法需要注意qml文件已經被加載完成才行,因為這種機制允許遠程加載qml文件,所以需要檢查Component的status屬性:
This property holds the status of component loading. The status can be one of the following:
Component.Null - no data is available for the component
Component.Ready - the component has been loaded, and can be used to create instances.
Component.Loading - the component is currently being loaded
Component.Error - an error occurred while loading the component. Calling errorString() will provide a human-readable description of any errors.
This property holds the status of component loading. The status can be one of the following:
Component.Null - no data is available
for
the component
Component.Ready - the component has been loaded, and can be used to create instances.
Component.Loading - the component is currently being loaded
Component.Error - an error occurred
while
loading the component. Calling errorString() will provide a human-readable description of any errors.
下面是例子代碼:
function createItem() {
if (itemComponent.status == Component.Ready && draggedItem == null) {
draggedItem = itemComponent.createObject(
window,
{
"image": paletteItem.image,
"x": posnInWindow.x,
"y": posnInWindow.y,
"z": 3
}
);
// make sure created item is above the ground layer
} else if (itemComponent.status == Component.Error) {
draggedItem = null;
console.log("error creating component");
console.log(itemComponent.errorString());
}
}
注意在JavaScript中沒有真正的類型,類型也是由對象模擬的。所以Qml 的Component在JavaScript代碼中也表現為一個對象,比如上面代碼的itemComponent就是Qml的Component,但也是一個對象。用它的createObject再創建真正可用的對象掛在window對象下面。
官方文檔參考:
http://qt-project.org/doc/qt-4.8/qdeclarativedynamicobjects.html
http://qt-project.org/doc/qt-5/qml-qtqml-qt.html#createComponent-method
http://qt-project.org/doc/qt-5/qml-qtqml-qt.html#createQmlObject-method
這就和web開發用JavaScript動態創建HTML的tag並插入到DOM模型中很像了。
JavaScript創建對象的幾種方式
潛意識裡,JavaScript不能算是面向對象的語言,要算也只能說是趨向面向對象的一種語言,至少它不能很好的吻合面向對象最基本的三大特性(繼承、封裝、多態),當然有很多人就認為JavaScript是面向對象語言,好像也說得沒錯,因為面向對象也能在JavaScript中實現,比如說繼承、封裝吧也都可以在JavaScript中實現,但是實現方便嗎?所以我覺得很疑惑。看到網上有一網友評價的很好,"面向對象只是一種思想,語言只能說是否很好的支持面向對象的特性。"如果對面向對象有一定的認識,用C也能寫出面向對象的程序,javascript也是如此。所以說不能斷言說JavaScript是面向對象語言, 呵呵,自認為是菜鳥,不敢妄自斷言,還是看看代碼:
1. 利用json創建對象
var company = {};
company.name= '華為';
company.address = '北京';
company.produce = function(message)
{
alert(message);
}
2.使用JavaScript中的Object類型
company= new Object();
company.name= '淘寶';
company.address = '杭州';
company.produce= function(message)
{
alert(message);
}
3.通過創建函數來生成對象
company = function()
{
this.name = '新浪';
this.address = '北京';
this.produce = function(message)
{
alert(message);
}
}
4.利用浏覽器window對象
window.name = '騰訊';
window.address = '北京';
window.produce = function(message)
{
alert(message);
}
擴展:
1.對象復制
emptyObject = new Object();
company.apply = function(o, c,)
{
if(o && c && typeof c == 'object')
{
for(var p in c)
{
o[p] = c[p];
}
}
return o;
};
emptyObject = Ext.apply(emptyObject,company);
2.對象復制(函數方式)
var copyOO = new Functio......余下全文>>
JavaScript 三種創建對象的方法 JavaScript中對象的創建有以下幾種方式:
(1)使用內置對象
(2)使用JSON符號
(3)自定義對象構造
一、使用內置對象JavaScript可用的內置對象可分為兩種:
1,JavaScript語言原生對象(語言級對象),如String、Object、Function等;
2,JavaScript運行期的宿主對象(環境宿主級對象),如window、document、body等。
我們所說的使用內置對象,是指通過JavaScript語言原生對象的構造方法,實例化出一個新的對象。如:
代碼如下:
var str = new String("實例初始化String");
var str1 = "直接賦值的String";
var func = new Function("x","alert(x)");//示例初始化func
var o = new Object();//示例初始化一個Object二、使用JSON符號
(i)何謂JSON ?
JSON (JavaScript Object Notation)即JavaScript對象命名,是一種輕量級的數據交換格式,易於閱讀和編寫,同時也易於及其解析和生成。它基於《JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999》的一個子集。JSON是完全獨立於語言的文本格式,因此成為數據交換的理想格式。
JSON作為JavaScript的一個自己,同時ActionScript、C、C#、ColdFusion、E、Java、JavaScript、ML、ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua等一系列的語言都提供支持,使得JSON成為Ajax開發的首選方案。
JSON有兩種構建方式,一種是采用簡單的“鍵/值對”的集合,在不同的語言中被理解為對象、記錄、結構、字典、哈希表、有鍵列表,或者關聯數組等,另一種采用有序的值列表,大部分語言把它理解為數組。
常用的創建方式是第一種,即采用“鍵/值對”集合的形式。在這種形式下,一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”後跟一個“:”(冒號),“ ‘鍵/值' 對”之間使用“,”(逗號)分隔。
JSON具有以下特點:(1)簡單格式化的數據交換;(2)易於人們的讀寫習慣;(3)易於機器的分析和運行。
在JavaScript中,JSON被理解為對象。通過字符串形式的JSON,數據可以很方便地解析成JavaScript獨享,並進行數據的讀取傳遞。通過JSON,在一定程度上客服了JavaScript對象無法作為參數系列化傳遞的問題。
1,簡單的JSON
{name:"劉德華",age:"25",sex:"男"}
2,JSON值的類型
JSON的值可以是簡單的數據類型,例如數字、浮點、字符等,也可以是數組及對象。例如以數組作為member鍵值的JSON:
{member:[{name:"劉德華"},{name:"郭富城"},{name:"張學友"},{name:&q......余下全文>>