窗口居中 [无父窗口的情况]

项目开发中遇到的问题

Posted by 雯饰太一 on June 25, 2023

窗口居中 [无父窗口的情况]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <QDesktopWidget>
#include <QApplication>
#include <QCursor>
#include <QRect>
void SimplePopupDlg::MoveCenter()
{
	QDesktopWidget* pDesktop = QApplication::desktop();
	int iSCnt = pDesktop->screenCount();
	for (int i = 0; i < iSCnt; i++)
	{
		QRect sRect = pDesktop->screenGeometry(i);
		QRect cRect = this->geometry();
		if (sRect.contains(QCursor::pos()))
		{
			int _x = (sRect.width() - this->width()) / 2;
			int _y = (sRect.height() - this->height()) / 2;
			move(_x + sRect.x(), _y + sRect.y());
            break;
		}
	}
}

上述代码,对于多屏的情况同样适用,使用QT桌面窗体类,可以获取到屏幕数量,并且获取到每一个屏幕的信息,根据当前鼠标的位置判断在哪一块屏幕上,然后再获取居中的尺寸即可。

另外,提供一个项目开发过程中的小思路,虽然QDialog已经是一个通用弹框类了,但是在一个项目的开发过程中,如果有各种各样的弹框,且有很多人,在很多位置都会弹框,那么这个时候就非常推荐开发人员,针对自己的项目封装出来一层Dialog,以后这个弹框要改变图标、居中、自动关闭、调整样式、行为记录等,都会变得很方便,甚至还能够检测是否有一些弹框在系统运行过程中没有被释放。

我是这么做的,不亦乐乎。