QT android开发中QMainWindow的背景图片设置

来源:互联网 发布:宁夏干部网络培训学校, 编辑:程序博客网 时间:2024/06/10 11:50

这几天,需要将一个Android应用的界面优化一下,需要将主界面加上一张背景图。

由于对QT本身的了解也不是很透彻,所以最初是使用的Baidu。在网上搜了一圈,无非就是使用

setStyleSheet("border-image:url(:xx/main_bg.jpg);");
或者:
setStyleSheet("#MainWindow{border-image:url(:xx/main_bg.jpg);}");
的使用。但是尝试后发现,第一种方法,所有的子控件都显示了一张图片在背景上。第二种方法根本不能显示出来。
后来看了源代码,对于QMainWindow有一个图介绍:
    The Main Window:    +----------------------------------------------------------+    | Menu Bar                                                 |    +----------------------------------------------------------+    | Tool Bar Area                                            |    |   +--------------------------------------------------+   |    |   | Dock Window Area                                 |   |    |   |   +------------------------------------------+   |   |    |   |   |                                          |   |   |    |   |   | Central Widget                           |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   |                                          |   |   |    |   |   +------------------------------------------+   |   |    |   |                                                  |   |    |   +--------------------------------------------------+   |    |                                                          |    +----------------------------------------------------------+    | Status Bar                                               |    +----------------------------------------------------------+
上面是直接拷贝过来的,有点没有对齐。
也就是说:QMainWindow是自带一个Layout的,它的原始界面上,不仅仅是一个QWidget对象,还有其他的菜单、工具、状态栏等等分区。所以说,它虽然是从QWidget继承来的,但是它不止包含一个QWidget对象,倒像是一个QWidget的管理者。
而平常使用的QDialog倒是实实在在在QWidget的基础上增加了一些功能。
所以:QDialog使用上面的方式是可以实现单独显示背景图片的,而QMainWindow就不行。
这个在设计器上反应最为明显,当将
border-image:url(:xx/main_bg.jpg);改为:
#MainWindow{border-image:url(:xx/main_bg.jpg);后点击应用,图片显示效果瞬间消失。
所以我们要想使用QWidget的setStyleSheet函数,必须是对于QWidget对象或者控件对象或者QDialog类的对象使用,而不能对于QMainWindow对象使用。
不过QMainWindow提供了对于其包含的QWidget对象的访问,比如中心工作区域,就可以通过:
QWidget *QMainWindow::centralWidget()访问到、对于menu区域使用:QWidget *QMainWindow::menuWidget() 。
所以对于工作区域的背景图片,我们就可以这样设置:
centralWidget()->setStyleSheet("border-image:url(:plat/res/pic/main_bg.jpg);");
这个可以设置成功,但是所有工作区域的子控件都会被影响。所以不能仅仅这样,还需要对其使用#符号进行限制。
最后代码如下:
    QWidget* workWgt = centralWidget();
    workWgt->setObjectName("wkWgt");//首先对这个对象设置名称
    workWgt->setStyleSheet("#wkWgt{border-image:url(:xx/main_bg.jpg);}");//对对应名称wkWgt 的对象进行设置背景图片操作
目标达成!
后来又测试了一下,其实在Android中不能实现的透明,在windows版本中,使用
setStyleSheet("#MainWindow{border-image:url(:xx/main_bg.jpg);}");
完全就可以了,没有必要像上面所讲的一样。
本文不过希望在Android的开发中,其他人不要像我一样浪费太多的时间。
本文使用QT:5.4 或者 :5.8

阅读全文
0 0
原创粉丝点击