日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Qt文档阅读笔记-QQmlApplicationEngine解析与实例(qml与C++混合编程及QQuick与widgets混合)

發布時間:2025/3/15 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文档阅读笔记-QQmlApplicationEngine解析与实例(qml与C++混合编程及QQuick与widgets混合) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

官方解析

博主例子


?

?

官方解析

QQmlApplicationEngine提供了從一個QML文件里面加載應用程序的方式。
這類聯合了QQmlEngine和QmlComponent去加載單獨的QML文件。他還向QML提供了應用程序的功能,這個應用程序的功能能夠讓C++與QML混合編程,使用C++控制業務邏輯,用QML做界面:
官方給的用法:

QQuickWidget *view = new QQuickWidget;view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));view->show();

他這個不像QQuickView,QQmlApplicationEngine那樣,他不會自動創建一個根窗口,如果你使用Qt Quick里面的視覺item,你需要把qml里面加一個Window,然后將其放進去。
如果不使用需要QGuiApplication的QML模塊(比如QtQuick)可以使用QCoreApplication與QQmlApplicationEngine。
下面列出了默認QQmlEngine關聯了的配置列表:
1.QML中的Qt.quit()與QCoreApplication::quit()關聯在了一起;
2.自動從主QML文件附近加載翻譯文件;
3.如果存在QQuickWIndow就會自動設置an incubation controller;
4.會自動設置QQmlFileSelector作為url攔截,應用于QML文件選擇;
通過繼承QQmlEngine可以更好的實現

?

博主例子

下面來補充下官方的例子(官方只給出了3行代碼現在把他完善起來)

完善后包含如下內容:

qml與C++混合編程及QQuick與widgets混合

?

做一個qml實現的表格,C++來控制業務,程序運行截圖如下:

程序結構圖如下:

源碼如下:

mytableviewmodel.h

#ifndef MYTABLEVIEWMODEL_H #define MYTABLEVIEWMODEL_H#include <QAbstractTableModel>class MyTableViewModel: public QAbstractTableModel {Q_OBJECT public:MyTableViewModel();int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;int columnCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;Q_INVOKABLE void addItem(QString one, QString two, QString three);private:QVector<QVector<QString>> m_aryData;};#endif // MYTABLEVIEWMODEL_H

main.cpp

#include <QGuiApplication> #include <QApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #include <QWidget> #include <QQuickView> #include "mytableviewmodel.h"int main(int argc, char *argv[]) {QGuiApplication app(argc, argv);QQmlApplicationEngine engine;MyTableViewModel model;model.addItem(QStringLiteral("中文"), QStringLiteral("999"), QStringLiteral("888"));engine.rootContext()->setContextProperty("theModel", &model);engine.load(QUrl(QLatin1String("qrc:/main.qml")));return app.exec(); }

mytableviewmodel.cpp

#include "mytableviewmodel.h"MyTableViewModel::MyTableViewModel(): QAbstractTableModel(NULL) {}int MyTableViewModel::rowCount(const QModelIndex &parent) const {Q_UNUSED(parent)return m_aryData.size(); }int MyTableViewModel::columnCount(const QModelIndex &parent) const {Q_UNUSED(parent)return 3; }QVariant MyTableViewModel::data(const QModelIndex &index, int role) const {return m_aryData[index.row()][role]; }QHash<int, QByteArray> MyTableViewModel::roleNames() const {QHash<int, QByteArray> roles;roles[0] = "1";roles[1] = "2";roles[2] = "3";return roles; }void MyTableViewModel::addItem(QString one, QString two, QString three) {beginInsertRows(QModelIndex(), m_aryData.size(),m_aryData.size());QVector<QString> list;list << one << two << three;m_aryData << list;endInsertRows(); }

main.qml

import QtQuick 2.8 import QtQuick.Controls 2.1ApplicationWindow {//id: frmWindow//width: 400//height: 300visible: trueMyTableView{id: myTableViewheight: parent.heightwidth: parent.widthfocus: falsetableView.itemDelegate:Rectangle {TextField{id: textFieldheight: 25text: styleData.value}}tableView.rowDelegate: Rectangle {height: 25}} }

MyTableView.qml

import QtQuick 2.8 import QtQuick.Controls 1.4TableView {property alias tableView: tableViewid: tableViewTableViewColumn {title: "第一列"; role: "1"; width: 120}TableViewColumn {title: "第二列"; role: "2"; width: 120}TableViewColumn {title: "第三列"; role: "3"; width: 120}model: theModel }

?

如果要用qml和傳統widgets混合,因為QQuickView已經提供了轉化為QWidget的接口,所以很簡單,修改如下代碼:

main.cpp

#include <QGuiApplication> #include <QApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #include <QWidget> #include <QQuickView> #include "mytableviewmodel.h"int main(int argc, char *argv[]) {//與傳統widgets結合QApplication app(argc, argv);QQuickView view;MyTableViewModel model;model.addItem(QStringLiteral("中文"), QStringLiteral("999"), QStringLiteral("888"));view.engine()->rootContext()->setContextProperty("theModel", &model);view.setResizeMode(QQuickView::SizeRootObjectToView);view.setSource(QUrl("qrc:/main.qml"));QWidget *widget = QWidget::createWindowContainer(&view);widget->show();return app.exec(); }

main.qml

import QtQuick 2.8 import QtQuick.Controls 2.1Item {//id: frmWindow//width: 400//height: 300visible: trueMyTableView{id: myTableViewheight: parent.heightwidth: parent.widthfocus: falsetableView.itemDelegate:Rectangle {TextField{id: textFieldheight: 25text: styleData.value}}tableView.rowDelegate: Rectangle {height: 25}} }

?

總結

以上是生活随笔為你收集整理的Qt文档阅读笔记-QQmlApplicationEngine解析与实例(qml与C++混合编程及QQuick与widgets混合)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲啪视频 | 黑人精品欧美一区二区蜜桃 | 日日操日日 | 欧美一级一级一级 | 中国美女洗澡免费看网站 | 久草国产精品 | 偷偷在线观看免费高清av | 亚洲男人第一网站 | 毛片视频观看 | 国产香蕉一区 | 印度毛茸茸 | 四虎精品一区 | 国产精品一区二区人妻喷水 | 爱情岛论坛自拍 | 中文字幕有码在线播放 | 久久一级免费视频 | 一个色在线 | 久久怡春院| 处女朱莉 | 国产一级一片免费播放放a 丁香六月色 | 丰满多毛的大隂户视频 | 国产精品久久久久久久久免费 | 日本a大片 | 久久久久香蕉视频 | 成年人在线免费 | chinese精品自拍hd | 日韩精品一区二区三区电影 | 亚洲视频五区 | 国产视频一区在线观看 | 国产日日夜夜 | 女同视频网站 | 97在线国产 | 亚洲精品中文字幕在线播放 | 西西午夜 | 国产51自产区 | 久久一热| 国产精品人人人人 | 日本少妇久久久 | 国产无码精品在线观看 | 一区二区三区免费播放 | 嫩草在线观看 | 思思久久精品 | 天天干天天爽天天射 | 国产十区 | 午夜视频在线观看视频 | 91国内精品久久久 | 91一级视频 | 免费看国产片在线观看 | 97超碰成人 | 色老头一区二区 | 亚洲 欧美 国产 另类 | 国产一区二区黄 | 四季av日韩精品一区 | 在线观看亚洲av每日更新 | 亚洲伊人影院 | 国产999在线观看 | 毛片毛片毛片 | 日本青草视频 | 男男车车的车车网站w98免费 | 男女网站视频 | 国产无遮挡免费视频 | 久久99色| 玖玖伊人 | 中文字幕日本一区二区 | 国产区123| 老局长的粗大高h | 国产白拍 | 秋霞电影网一区二区 | 五月婷婷爱爱 | 日本爽爽爽爽爽爽在线观看免 | 蜜桃臀av | 日本激情视频一区二区三区 | 欧美日韩一级黄色片 | 男人天堂2021 | 日韩在线91 | 亚洲av永久无码精品一区二区国产 | 欧美在线91 | av中文字幕在线播放 | 亚洲精品久久久久avwww潮水 | 影音先锋成人 | 欧美成人69| 波多野结衣一区二区三区免费视频 | 91福利视频网 | 波多野结衣加勒比 | 啪啪亚洲 | 综合久久影院 | 麻豆精品久久 | 欧美日韩三级在线观看 | 福利视频一区 | 久久精品大全 | 欧美无砖砖区免费 | 夜夜天天操 | 深夜福利91| 日韩一级在线观看视频 | 亚洲国产精品成人综合在线 | 黄片毛片av | 91蜜桃视频| 欧美日韩中文国产一区发布 | 国产午夜三级 |