QGC中MainWindow与QML
来源:互联网 发布:深圳24小时营业 知乎 编辑:程序博客网 时间:2024/06/08 19:26
对QGC主窗口的学习
在ui\MainWindow.h中
构造方法被定义成私有的。
在QGCApplication.cc中__initForNormalAppBoot()中
创建窗口,不是new MainWindow,也是由于构造方法是私有的
采用
MainWindow *mainWindow=MainWindow::__create();方式创建
在_initForNormalAppBoot(void)执行时候:
QSettings settings;_loadCurrentStyleSheet();//上一个窗口关闭时候退出main application connect(this,&QGCApplication::lastWindowClosed,this,QGCApplication::quit);
在MainWindow的构造方法中,
_instance=this;loadSettings();emit initStatusChanged(tr('xxx'),Qt::AlignLeft|Qt::AlignBottom,QColor(62,93,141));_ui.setupUi(this);
//确保在改变最小宽度之前,确保所有tool bar elements都fit
setMinimumWidth(1008);configureWindowName();//使用QVBoxLayout这个widget来装所有view_centralLayout=new QVBoxLayout();_centralLayout->setContentsMargins(0,0,0,0);centralWidget()->setLayout(_centralLayout);
MainWindowHybrid.qml
Item{ function showSetupView(){ mainWindowInner.item.showSetupView() } function attemptWindowClose(){ mainWindowInner.item.attemptWindowClose() } function showMessage(message){ mainWindowInner.item.showMessage(message) }}
在上述qml中的方法,在QGCApplication.cc中定义
void QGCApplication::showSetupView(void){ QMetaObject::invokeMethod(_rootQmlObject(), "showSetupView");}void QGCApplication::qmlAttemptWindowClose(void){ QMetaObject::invokeMethod(_rootQmlObject(), "attemptWindowClose");}void QGCApplication::showMessage(const QString& message){ // Special case hack for ArduPilot prearm messages. These show up in the center of the map, so no need for popup. if (message.contains("PreArm:")) { return; } QObject* rootQmlObject = _rootQmlObject(); if (rootQmlObject) { QVariant varReturn; QVariant varMessage = QVariant::fromValue(message); QMetaObject::invokeMethod(_rootQmlObject(), "showMessage", Q_RETURN_ARG(QVariant, varReturn), Q_ARG(QVariant, varMessage));#ifndef __mobile__ } else if (runningUnitTests()){ // Unit test can run without a main window which will lead to no root qml object. Use QGCMessageBox instead QGCMessageBox::information("Unit Test", message);#endif } else { qWarning() << "Internal error"; }}
在ui\MainWindow.h中
_mainQmlWidgetHolder->setContextPropertyObject("controller",this);_mainQmlWidgetHolder->setContextPropertyObject("debugMessageModel",AppMEssage::getModel());_mainQmlWidgetHolder->setSource(QUrl::fromUserInput("qrc:qml/MainWindowHybrid.qml"));
因此在qml中有个controller可以用
阅读全文
0 0
- QGC中MainWindow与QML
- QGC的MainWindow
- QGC之MainWindow
- QGC的MainWindow的menuWidget
- Qt中UI::MainWindow与MainWindow
- QGC之qml
- QGC之qml学习
- QGC视图组件qml
- QGC之QGCView.qml
- WPF中MainWindow与Page通信
- QGC中地图
- QGC中QGCTool
- QGC中QGCTool
- QGC中QGCQmlWidgetHolder
- QGC中地图
- QGC中主界面
- QGC
- MainWindow
- 数据结构之双向链表
- 4093:倒排索引查询--bitmap并查集
- leetcode 编程题 系列 (二分查找)旋转数组的查找、重复数字 33 153
- setsockopt函数解释
- Qt 之 QSqlDriverPlugin Class
- QGC中MainWindow与QML
- SSH综合项目实战(快递) -- day01 环境搭建及easyui、ztree使用介绍
- Web网站架构和演进过程
- Apache与Nginx的优缺点比较
- Kafka使用log.retention.hours改变消息端的消息保存时间
- $.post() 提交表单,$.get() 异步刷新页面
- VM虚拟机centos6.5安装nginx
- HTML表格,跨行、跨列
- Qt插件定义