QML程式設計 基礎 小白

qq_45743563發表於2020-10-19
QT += quick   //新增quick模組
QQuickView //檢視 用來連結QML和程式

0

QQuickView viewer;//Quick檢視

    viewer.setSource(QUrl(QLatin1String("qrc:///qml/qmlvideofx/Main.qml")));//載入檢視QML檔案
 viewer.setResizeMode(QQuickView::SizeRootObjectToView);//檢視將自動將根項調整為檢視的大小
 viewer.show();//顯示

QQmlApplicationEngine //qml引擎 用來連結程式和qml檔案

QT += qml

QQmlApplicationEngine ::load(QUrl(QLatin1String(“qrc:///qml/qmlvideofx/Main.qml”)));//載入QML檔案(需連結訊號與曹)

[signal] void QQmlApplicationEngine::objectCreated(QObject *object, const QUrl &url)

該訊號在物件完成載入時發出。如果載入成功,物件包含一個指向載入物件的指標,否則指標為空。
還提供了物件來自的元件的url。

注意:如果元件的路徑是作為包含相對路徑的QString提供的,那麼url將包含檔案的完全解析路徑。-


如果要在QML中呼叫c++中得函式 那麼在定義函式時須在返回值前面新增一個標記 Q_INVOKABLE(註冊一個方法到QML) 或者是qt中得槽函式

將c++物件作為屬性註冊到QML

  1. #include<QQmlContext>//上下文允許將資料公開給由QML引擎例項化的QML元件。
    
    
    QQuickView viewer;//檢視
    QQmlContext *x=view.rootContext();//返回上下文裡的根指標QQmlContext型別
    xxx data;//自定義類物件
    x->setContextProperty("在QML中訪問的自定義物件名 xxx",&data);//註冊一個物件到QML    設定屬性將&data註冊到QML中data是自定義類物件 這樣在 qML中就可以使用自定義類物件的方法了在自定義類中 data物件的方法需加 Q_INVOKABLE  
    
    //QML中
    import QtCharts 2.0
    
    Item //QML中最基本得物件
    {
        xxx.xxx//這裡就是自定義物件名,和他的方法
        Text
        {
          text:  
        }
      //可宣告一些屬性或者新增一些物件
    }
    
    
    
        viewer.setSource(QUrl(QLatin1String("qrc:///qml/qmlvideofx/Main.qml")));//載入檢視QML檔案
    
    
     viewer.setResizeMode(QQuickView::SizeRootObjectToView);//檢視將自動將根項調整為檢視的大小
     viewer.show();//顯示
    

在c++中呼叫QML中的函式
//QML中
import QtCharts 2.0

Item //QML中最基本得物件
{
    
    Text
    {
        id:qmlf
      function qmlFunction(msg)//QML中自定義函式
      {
          console.log("列印",msg)
              return "abc"
          
      }
        qmlFunction("資料")//QML中呼叫自定義函式
    }
    
    
    
    
  //可宣告一些屬性或者新增一些物件
     qmlf.qmlFunction("資料")//QML中呼叫自定義函式
}

程式中用引擎

QQmlApplicationEngine  engine;//qml引擎 用來連結程式和qml檔案
QQmlCompoent compen(&engine,"QML檔案路徑");//QML元件並新增到引擎//如果路徑是在下層目錄需加../否則直接寫名稱即可
QObject *object=compen.create();//建立一個元件並用QObject指標指向他
QVariant msg="hello qml";//QVariant物件每次儲存單個型別()的單個值。
QVariant retVal;

 QMetaObject::invokeMethod(obj, "qmlFunction",                                                            Q_RETURN_ARG(QVariant,retVal),//這個是返回值
                           Q_ARG(QVariant, msg));//這個是傳參
   // Q_RETURN_ARG,Q_ARG必須指定QVariant型別 //程式中呼叫QML函式
   

c++中呼叫QML中的訊號
import QtCharts 2.0

Item //QML中最基本得物件
{
    Item
    {
      id:item
      width:100
      height:100
      signal:qmlsignal(string msg)
  
      MouseArea//滑鼠
      {
        anchors.fill:parent//滑鼠的點選的區域為父視窗的區域
        onClicked:item.qmlSignal("wai")//滑鼠點選了發射訊號
      }
      
    }
  //可宣告一些屬性或者新增一些物件
}

c++程式中

#include<QQuickItem>//Quick項
QQuickView viewer(QUrl(QLatin1String("qrc:///qml/qmlvideofx/Main.qml");//檢視
QObject*item=viewer.rootObject();//返回跟物件 QQuickItem型別                       
xxx xxx;//自定義類
QObject::commect(item,SIGNAL(qmlSignal(QString)),&xxx,SLOT(自定義類的槽函式(QString)));                       
  viewer.show();//檢視顯示                     




QML

QML支援許多基本型別。
基本型別是引用簡單值的型別,例如int或string。這與QML物件型別形成對比,QML物件型別是指具有屬性、訊號、方法等的物件。與物件型別不同,基本型別不能用於宣告QML物件:例如,不可能宣告int{}物件或size{}物件。

基本型別可指:
單個值(例如int指單個數字,var可以指單個專案列表)

包含一組簡單屬性-值對的值(例如,大小指v)

import QtQuick 2.0

import QtCharts 2.0

Item //QML中最基本得物件
{
    Item
    {
      signal:QML自定義訊號
      text:  
    }
  //可宣告一些屬性或者新增一些物件
}

QML設計模式 QT其他專案Qt Quick UI

相關文章