[英]Progress bar implementation in QML to show progress of a loop in C++
我的C ++代碼旁邊有我的QML UI。 我需要顯示其進度的循環是用C ++開發的,如下所示:
for(unsigned int j = 0; j < Count; ++j) {
// Do stuff
}
在我的QML代碼上,我需要像這樣的進度欄:
ProgressBar {
value: j // Should come from C++ loop
// It is "j" on C++ loop
from: 0 // C++ loop starts out with 0
to: Count // C++ loop ends with "Count"
}
我不知道我的C ++循環和QML進度欄如何相互鏈接。 我找不到任何相關的例子 。 誰能給我一個提示。
我的C ++和QML之間的通信是通過使用Q_PROPERTY
這樣完成的,但是我不確定如何使用它:
Q_PROPERTY(float j READ j WRITE setJ NOTIFY jChanged)
這很容易! 讓我們一步一步走。
您的C ++類應擴展QObject
並在其中使用Q_OBJECT
宏。 例如,我稱它為Worker
。
class Worker : public QObject { Q_OBJECT Q_PROPERTY(float progress READ progress NOTIFY progressChanged) public: Q_INVOKABLE void start() { // start the worker thread in which your loop spins } float progress(); // progress getter signals: void progressChanged(float progress); };
啟動后台線程並定義其自己的progressChanged
信號。
for(unsigned int j = 0; j < Count; ++j) { // Do stuff emit progressChanged(/*current progress*/); }
將后台線程的progressChanged
連接到主線程活動對象Worker
的progressChanged
信號(排隊連接)。 需要執行此步驟以將信號從后台線程中繼到QML。
將C ++類鏈接到QML:
int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQuickView view; Worker w; view.engine()->rootContext()->setContextProperty("worker", &w); view.setSource(QUrl::fromLocalFile("MyItem.qml")); view.show(); return app.exec(); }
在QML端收聽信號:
ProgressBar { id: prg from: 0 // C++ loop starts out with 0 to: Count // C++ loop ends with "Count" Connections { target: worker onProgressChanged: prg.value = progress; } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.