QWidget位于的查找屏幕

Elm*_*lmi 4 qt qt5

具有功能

QApplication::desktop()->screenCount();
QApplication::desktop()->screenGeometry();
Run Code Online (Sandbox Code Playgroud)

我发现系统上有多少个屏幕以及它们位于哪个屏幕坐标上。现在,我想找出QWidget位于哪个屏幕上。我怎样才能做到这一点?我是否必须对照屏幕坐标检查QWidget的坐标,还是有一种更优雅的方法直接返回屏幕编号?

谢谢!

Zor*_*ord 6

除了 Sillicomancers 的答案之外,我使用以下代码来替换已弃用的QDesktopWidget::availableGeometry(const QWidget *widget)

QScreen* pScreen = QGuiApplication::screenAt(widget->mapToGlobal({widget->width()/2,0}));
QRect availableScreenSize = pScreen->availableGeometry();
Run Code Online (Sandbox Code Playgroud)

它使用顶部中间widget所在的屏幕。


Gur*_*ant 5

我认为您应该寻找的功能是

int QDesktopWidget::screenNumber(const QPoint &point) const
Run Code Online (Sandbox Code Playgroud)

这是一个过载功能。返回包含该点的屏幕的索引,或者是距该点最短距离的屏幕的索引。

由于我没有多个屏幕,因此您可以自己检查一下,QWidget :: pos()函数提供了QPoint

编辑:根据scopchanov在评论中的建议,您也可以使用

QDesktopWidget::screenNumber(const QWidget *widget = Q_NULLPTR)
Run Code Online (Sandbox Code Playgroud)


Sil*_*cer 5

QDesktopWidget在较新的版本的Qt(已被弃用5.11及以上不在5.10弃用)。

从Qt 5.10开始,有QGuiApplication::screenAt(QPoint)替代screenNumber(QPoint)

似乎没有可以直接替代screenNumber(QWidget*)。但是,可以通过QScreen指针获取有关该小部件所在屏幕的信息:

QScreen *screen = widget->window()->windowHandle()->screen();
qDebug() << screen->geometry()
                << screen->availableGeometry();
Run Code Online (Sandbox Code Playgroud)

  • 不知怎的,这对我不起作用(Windows,Qt5.13)。 (2认同)

Kao*_*Kao 5

Qt5.14 中引入了QWidget::screen() 。