qml中注册和使用C++对象,以及在qml中实现窗体最大最小化
2012-09-26 11:31
316 查看
在main函数中相关代码如下:
同时需要导入的文件头:
#include
<QDeclarativeContext>
这里将app和QDeclarativeView对象注册到QML中,在QML中通过引用"WindowQuitControl"和"WindowControl"(接下来的qml文件中都会使用这两个名字),就可以像在C++中使用app和view一样!
这里的view可以是QDeclarativeView,也可以是QmlApplicationViewer。如果用系统自动生成的QtQuick应用程序是后面这个对象,因为代码有特殊需求所以用了前面那个!
1、之所以将app注册到qml中,是因为QDeclarativeView没有quit()方法,所以如果在qml中使用Qt.quit()会提示signal quit没有接受者,我的一个解决办法就是将app注册到qml中,通过在qml中使用:
这样就可以同样退出程序。
当如如果想在退出程序之前做一些操作,可以讲相关的类注册到qml中,然后再相应的(类似quit方法)的方法里写入相关操作,然后再qml中调用就行!!
ps: 如果这里的view声明为:
在qml中使用Qt.quit(),就不会有说quit方法没有接收者,然后就无法退出的问题了!
2、关于窗体最大、最小化的问题,
如果想在qml中实现某个按钮单击之后可以最大或最小化,可以像上述那样把view注册到qml中,然后再qml中调用:
来实现最小化,全屏展示。
而通过下面这个句子
可以将窗体置于最底层,而不是最小化。但如果写到手机应用程序中就可以在效果上实现最小化(类似于后台运行)
补充一句,由于特殊需要,当实现的应用程序没有外框的时候,必须自己实现最大最小化效果,所以才会有上述的函数的调用。如果用windows自己的界面边框风格,鼠标点击(或屏幕触摸)就可以实现最大最小化。
3、在去了边框(如何去边框,参考我之前的blog)之后,单纯调用showMaximized等方法是没有效果的。
这是因为,在view的更改大小的模式默认被设置成SizeViewToRootObject,需要自己修改ResizeMode。代码片段如下:
//设置模式Mode为可以调整qml大小,默认:QDeclarativeView::SizeViewToRootObject
QmlApplicationViewer::SizeRootObjectToView
QApplication app(argc, argv);
QDeclarativeView view ;
//将app注册到qml中,方便对主程序的退出,最大最小化等相关操作
view.rootContext()->setContextProperty("WindowQuitControl",&app);
view.rootContext()->setContextProperty("WindowControl",&view);
同时需要导入的文件头:
#include
<QDeclarativeContext>
这里将app和QDeclarativeView对象注册到QML中,在QML中通过引用"WindowQuitControl"和"WindowControl"(接下来的qml文件中都会使用这两个名字),就可以像在C++中使用app和view一样!
这里的view可以是QDeclarativeView,也可以是QmlApplicationViewer。如果用系统自动生成的QtQuick应用程序是后面这个对象,因为代码有特殊需求所以用了前面那个!
1、之所以将app注册到qml中,是因为QDeclarativeView没有quit()方法,所以如果在qml中使用Qt.quit()会提示signal quit没有接受者,我的一个解决办法就是将app注册到qml中,通过在qml中使用:
//***.qml …… MouseArea{ onClicked: WindowQuitControl.quit(); } ……
这样就可以同样退出程序。
当如如果想在退出程序之前做一些操作,可以讲相关的类注册到qml中,然后再相应的(类似quit方法)的方法里写入相关操作,然后再qml中调用就行!!
ps: 如果这里的view声明为:
QmlApplicationViewer view;
在qml中使用Qt.quit(),就不会有说quit方法没有接收者,然后就无法退出的问题了!
2、关于窗体最大、最小化的问题,
如果想在qml中实现某个按钮单击之后可以最大或最小化,可以像上述那样把view注册到qml中,然后再qml中调用:
onClicked: WindowControl.showFullScreen();
onClicked: WindowControl.showMinimized();
来实现最小化,全屏展示。
而通过下面这个句子
WindowControl.lower();
可以将窗体置于最底层,而不是最小化。但如果写到手机应用程序中就可以在效果上实现最小化(类似于后台运行)
补充一句,由于特殊需要,当实现的应用程序没有外框的时候,必须自己实现最大最小化效果,所以才会有上述的函数的调用。如果用windows自己的界面边框风格,鼠标点击(或屏幕触摸)就可以实现最大最小化。
3、在去了边框(如何去边框,参考我之前的blog)之后,单纯调用showMaximized等方法是没有效果的。
这是因为,在view的更改大小的模式默认被设置成SizeViewToRootObject,需要自己修改ResizeMode。代码片段如下:
//设置模式Mode为可以调整qml大小,默认:QDeclarativeView::SizeViewToRootObject
view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
view.showMaximized();
如果view是QmlApplicationViewer,那么参数就是:
QmlApplicationViewer::SizeRootObjectToView
相关文章推荐
- Qt中窗体最大最小化以及窗口大小修改的相关函数使用(2)
- 使用BroadCast实现进程间通信以及静态注册和动态注册广播的区别
- 使用php完成一个用户注册以及管理的demo(php实现单文件与多文件的上传)
- 使用jquery validate+jquery.form实现输入验证以及注册成功提示
- C#拖动自己的定义标题栏(panel)以及实现窗体拖动关闭和最小化
- Python学习笔记_05:使用Flask+MySQL实现用户登陆注册以及增删查改操作
- C#窗体皮肤制作(二):创建窗体库项目以及最小化、最大化、关闭按钮的实现
- 根据.DFM文件动态生成窗体以及在之前先必须注册窗体中使用到的类
- 以用户登录、注册、添加删除修改为例,解析jdbcTemplate使用方式以及spring注解实现CRUD
- Struts学习总结(三)---使用Struts实现一个模拟前后台的注册功能实现。
- python使用Qt界面以及逻辑实现
- linux上使用amoeba实现MySql集群,以及读写分离,主从复制
- sQlite常用语句以及sQlite developer的使用与注册
- antisamy的配置以及使用实现XSS防御
- 使用autoCompleteTextView以及MultiAutoCompleteTextView实现自动匹配输入内容
- C#中使用委托创建事件实现两个窗体间通信
- 使用委托实现窗体之间的传值--事件订阅实现传值
- Haproxy和pacemaker结合corosync实现负载均衡高可用,以及crm命令的使用
- 免费注册参加"使用表格控件EJunGrid,实现企业级表单的录入与展现" 网络研讨会!
- 使用qml 实现简单的播放器(1)