赞
踩
一,Qt全屏显示相关函数
1,全屏显示函数
QWidget::showFullScreen(); // 此方法只对顶级窗口有效,对子窗口无效
2,恢复显示函数
QWidget::showNormal(); // 此方法也只对顶级窗口有效,对子窗口无效
3,最小化显示函数
QWidget::showMinimized();
4,最大化显示函数
QWidget::showMaximized();
5,设置窗口类型
QWidget::setWindowFlags(Qt::WindowFlags);
二,子窗口全屏显示
Qt中的窗口QWidget成员函数showFullScreen,可以将窗口全屏显示,但是只是对窗口模式有用,而且窗口必须是顶级窗口,调用isTopLevel判断窗口是否为顶级窗口。
如何让子窗口成为顶级窗口呢?只需要将窗口QWidget的父窗口设置为nullptr,同时调用SetWindowFlags(Qt::Dialog);或setWindowFlags(Qt::Window)。若没有调用setParent(nullptr),只是调用了SetWindowFlags(Qt::Dialog)或者SetWindowFlages(QT::Window),则子窗口只会从主窗口中分离出来,但是子窗口并不会全屏显示,即showFullScreen调用是失败的,这一点尤其需要注意。
全屏显示过程如下:
- void FormPageEdit::AMFullScreen()
- {
- m_pFormPage->removeFormPageEdit();
-
- setWindowFlags(Qt::Window);
- showFullScreen();
- }
这里FormPageEdit是继承QWidget的一个子窗口,m_pFormPage是主窗口,在出窗口中定义了一个
QStackedWidget,调用ui->stackedWidgetPage->addWidget(m_pFormPageEdit);将子窗口添加到stackedWidgetPage中,我们全屏显示时,需要将子窗口的父类置为nullptr
- void FormPage::removeFormPageEdit()
- {
- ui->stackedWidgetPage->removeWidget(m_pFormPageEdit);
- }
如上代码,调用removeWidget则从stackedWidgetPage中移除了子窗口,同时子窗口的父类就为nullptr了。
三,子窗口全屏恢复显示
子窗口全屏显示恢复是个相反的过程,首先将子窗口类型的设置为子窗口类型(之前已经被设置为窗口了),然后调用showNormal(),这里的showNormal对子窗口类型有效,然后恢复子窗口的父窗口,也就是将子窗口重新添加到stackedWidgetPage中。
- void FormPageEdit::AMNormalScreen()
- {
- showNormal();
- setWindowFlags(Qt::SubWindow);
-
- m_pFormPage->setFormPageEdit();
- }
-
- void FormPage::setFormPageEdit()
- {
- ui->stackedWidgetPage->addWidget(m_pFormPageEdit);
- ui->stackedWidgetPage->setCurrentWidget(m_pFormPageEdit);
- }
四,注意事项
一定要清楚子窗口的父窗口是谁,上面的代码,如果直接创建子窗口时,直接保存子窗口的父窗口,然后再全屏,这样会有问题的,具体问题就是子窗口一直显示的很大(已经在父窗口内显示了,但是界面还是很大),具体原因就是没用调用stackedWidgetPage->addWidget函数,正确的方式是添加或者移除父窗口是应该调用stackedWidgetPage的成员函数操作,而不是直接给子窗口的父窗口的指针。
五,多屏全屏显示问题
我的电脑是双屏,一个只主屏幕,一个是扩展屏幕,默认全屏模式,全屏窗口只会显示在主显示屏上,那么如何控制窗口全屏在哪个显示屏上呢?
- // 全屏显示
- void FormPageEdit::AMFullScreen()
- {
- m_pFormPage->removeFormPageEdit();
-
- setWindowFlags(Qt::Window);
-
- QDesktopWidget *desktop = QApplication::desktop();
- int screen_count = desktop->screenCount(); // 获取显示屏个数
- int prim_screen = desktop->primaryScreen(); // 获取主显示屏编号
-
- // QWidget *parentDesktop = desktop -> screen(prim_screen); // 主屏显示
- QWidget *parentDesktop = desktop -> screen(1); // 扩展屏幕显示
- this->setParent(parentDesktop);
-
- showFullScreen();
- }
如上,这里我们获取显示屏的个数,然后设置子窗口的父窗口,如果设置为主屏幕ID,则全屏在主屏幕显示,如果设置为扩展屏幕ID,则在扩展屏幕进行显示。
扩展屏幕全屏效果:
从这里其实可以看出,默认父窗口为nullptr,其实系统会默认将主屏幕的窗口作为子窗口的父窗口来设置。
如果需要主屏和扩展屏幕全部全屏显示呢?
这个留给读者自己思考了,需要源码的可以私信给我。
各位看官,有钱的捧个钱场,没钱的捧个人场。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。