2013-08-02 18 views
5

Có thể nhận được thông báo lỗi Qt khi sử dụng các mục được tạo theo kiểu động không?Thông báo lỗi Qt khi sử dụng các mục QML được tạo động?

Tôi đã cài đặt một handler nhắn để nắm bắt đầu ra Qt tại thời gian chạy:

qInstallMessageHandler(myMessageOutput); 

Tôi tải một tập tin QML cơ bản thành một QQuickView và nó hoạt động tốt. Nếu có lỗi trong nguồn qml chúng được hiển thị trong nhật ký của tôi. Nếu tôi tự động tạo các mục và chúng chứa các lỗi nó không thành công mà không có bất kỳ thông báo nào.

tôi có thể tạo các đối tượng năng động như thế này:

var component = Qt.createComponent("config.qml"); 
var dlg = component.createObject(parentId, {}); 

Các lỗi duy nhất tôi nhận được là như sau:

'qml\qqmlcomponent.cpp':845 function: 'QObject* QQmlComponentPrivate::beginCreate(QQmlContextData*)'|Qt Warning: QQmlComponent: Component is not ready 

lỗi này được viết cho bất kỳ loại vấn đề trong QML nó đang cố gắng tải.

Trả lời

21

Bạn nên đọc và theo dõi documentation.

Những gì bạn không kiểm tra là component.status phải bằng Component.Ready trước khi gọi tới component.createObject.

Nếu tệp bằng cách nào đó không tải được, vì tệp không phân tích cú pháp chính xác, component.status sẽ bằng Component.Error và bạn nên gọi errorString() để biết thêm thông tin.

var component = Qt.createComponent("config.qml"); 
if(component.status != Component.Ready) 
{ 
    if(component.status == Component.Error) 
     console.debug("Error:"+ component.errorString()); 
    return; // or maybe throw 
} 
var dlg = component.createObject(parentId, {}); 

Dù sao bạn nên luôn luôn khẳng định component.status == Component.Ready trước khi gọi createObject().

+0

Đã bỏ lỡ phần tài liệu đó. Cảm ơn – Jay

+0

Yow. Điều đó thật đáng sợ. Tôi không * nghĩ * Tôi đã đánh nó nhưng rất hay để biết. – Jay

+0

Tôi nghĩ rằng tôi đã tìm ra một công việc xung quanh cho lỗi trong tải không đồng bộ. Sử dụng phần tử QML Loader để bắt đầu tải một tệp QML. Trong tệp qml, sử dụng tín hiệu onCompleted để làm cho nó được hiển thị. – Jay

Các vấn đề liên quan