您的位置:首页 > 编程语言 > C语言/C++

qml中注册和使用C++对象,以及在qml中实现窗体最大最小化

2012-09-26 11:31 316 查看
在main函数中相关代码如下:

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

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ signal 手机 c
相关文章推荐