Qml 快速使用

這周簡單的了解了下Qt的qml。個人對它的定位就是可以方便快速地繪製一些精美的UI,對快速開發前端(UI)還是有挺大幫助的。所以並沒有從整體上了解,而是快速的組合了一個小Demo,效果如下。試想下,如果自定義Widget需要實現多少東西呢?

Demo總體概述:通過Widget上的Slider控制Qml中的撥碼盤刻度指向,實現了Qml與Widget通訊。

程式環境:Windows、Qt5.9.8(MSVC2015)

一、 項目準備

由於使用到了Qml以及QQuickWidget,所以pro中要添加quick和quickwidgets模組,不然會報出一些奇葩的問題。qml文件以及用到的圖片是通過資源文件形式添加進來的。

QT += quick  QT +=  core gui quickwidgets

二、 程式源碼

1. Widgwet部分

該部分主要使用了QQuickWidget用來嵌入Qml的顯示,並使用Qt的訊號和槽來進行通訊。

ui->quickWidget->setSource(                  QUrl(QStringLiteral("qrc:/main.qml")));      QObject *item = (QObject *)ui->quickWidget->rootObject();      if(nullptr != item)      {          connect(this,SIGNAL(signal_position(int)),                  item,SIGNAL(posSignal(int)));  }

2. Qml部分

該部分程式幾乎都是Qt官方自帶例子的源碼,為方便閱讀,直接刪去了例子中沒有用到的部分。

***Qt5.9.8ExamplesQt5.9.8quickcustomitemsdialcontrolcontent

所以主要說下訊號部分

Rectangle {      color: "#545454"      width: 300; height: 300        signal posSignal(int pos)        // 訊號處理程式(處理從 Qt Widgets 接收到的訊號)      onPosSignal: {          dial.value = pos      }      //官方例子撥碼盤調用,刪除其他程式      Dial {          id: dial          anchors.centerIn: parent  //        value: slider.x * 100 / (container.width - 32)          value: 0      }  }

藍色字體部分是Qml中訊號聲明以及實現的部分,與Widget中訊號槽連接對應起來看。

三、 小結

對於地面站軟體顯示一些參數的情況下,使用Qml還是很方便的。以後有機會使用自定義Widget做一個類似的效果。

如果對其他前端語言比較熟悉的話,如h5、js等,使用它們也可以快速的搭建前端介面。越了解就會發現一個應用程式往往是多種語言結合在一起的,把合適的語言用在合適的地方。