簡體   English   中英

QML中的進度條實現,以顯示C ++中循環的進度

[英]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)

這很容易! 讓我們一步一步走。

  1. 您的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); }; 
  2. 啟動后台線程並定義其自己的progressChanged信號。

     for(unsigned int j = 0; j < Count; ++j) { // Do stuff emit progressChanged(/*current progress*/); } 
  3. 將后台線程的progressChanged連接到主線程活動對象WorkerprogressChanged信號(排隊連接)。 需要執行此步驟以將信號從后台線程中繼到QML。

  4. 將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(); } 
  5. 在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM