具有功能
QApplication::desktop()->screenCount();
QApplication::desktop()->screenGeometry();
Run Code Online (Sandbox Code Playgroud)
我发现系统上有多少个屏幕以及它们位于哪个屏幕坐标上。现在,我想找出QWidget位于哪个屏幕上。我怎样才能做到这一点?我是否必须对照屏幕坐标检查QWidget的坐标,还是有一种更优雅的方法直接返回屏幕编号?
谢谢!
除了 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所在的屏幕。
我认为您应该寻找的功能是
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)
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)