本文主要是介绍Qt自定义标题栏的多屏适配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
标题栏自定义
参考博客 : https://blog.csdn.net/goforwardtostep/article/details/53494800
多屏适配
MyTitleBar类抽象定义了自定义标题栏,使用起来相对方便。但是在多屏情况下,窗口初次显示只能在主屏幕上,如果拖到其他屏幕上最大化,还会回到主屏。
处理方式如下:
-
获取当前屏幕的索引
/* MyTitleBar 的 mouseMoveEvent 函数*/ void MyTitleBar::mouseMoveEvent(QMouseEvent *event) {if (_isPressed) {QPoint movePoint = event->globalPos() - _startMovePos;QPoint widgetPos = this->parentWidget()->pos();_startMovePos = event->globalPos();this->parentWidget()->move(widgetPos.x() + movePoint.x(), widgetPos.y() + movePoint.y());// 每次移动后 获取当前屏幕的索引currentScreenIndex = QApplication::desktop()->screenNumber(this->parentWidget);}return QWidget::mouseMoveEvent(event); }
-
根据索引获取屏幕大小信息(QRect)
/*使用MyTitleBar的窗口*/ void MainPage::onButtonMaxClicked() {_titleBar->saveRestoreInfo(this->pos(),QSize(this->width(),this->height()));QRect desktopRect = QApplication::desktop()->availableGeometry(_titleBar->getCurrentScreenIndex()); // availableGeometry(int) 传入索引值,获取目标屏幕的QRectQRect factRect = QRect(desktopRect.x()-3,desktopRect.y()-3, desktopRect.width()+6,desktopRect.height()+6);setGeometry(factRect); }
注意事项:
- QApplication::desktop()->screenNumber() 函数默认获取的是主屏幕的索引,通过传入QWidget*参数获取当前窗口所在屏幕
- 获取屏幕大小有两个函数: QApplication::desktop()->availableGeometry(no), QApplication::desktop()->screenGeometry(no);尽量使用 QApplication::desktop()->availableGeometry(no),availableGeometry函数获取的是可用屏幕大小(除去任务栏)
- availableGeometry 与 screenGeometry不传参数时获取的是主屏幕的大小
- 不要在QWidget的showEvent中获取屏幕的索引,此时获取的都是主屏幕,在QWidget.show()之后可以获取到窗口所在的屏幕
这篇关于Qt自定义标题栏的多屏适配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!