查找QWidget所在的屏幕

时间:2018-03-08 07:01:22

标签: qt qt5

带功能

QApplication::desktop()->screenCount();
QApplication::desktop()->screenGeometry();

我发现我的系统上存在多少屏幕以及它们所在的屏幕坐标。现在我想知道QWidget位于哪个屏幕上。我怎样才能做到这一点?我是否必须根据屏幕坐标检查QWidget的坐标,或者是否有更优雅的方式直接返回屏幕编号?

谢谢!

3 个答案:

答案 0 :(得分:4)

我认为你应该寻找的功能就是这个

int QDesktopWidget::screenNumber(const QPoint &point) const

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

由于我没有多个屏幕,你可以自己查看,QWidget :: pos()函数提供了QPoint

编辑: 正如scopchanov在评论中所建议的那样,您也可以使用

QDesktopWidget::screenNumber(const QWidget *widget = Q_NULLPTR)

答案 1 :(得分:1)

QDesktopWidget在较新的Qt版本(5.11 and abovenot deprecated in 5.10)中已被弃用。

自Qt 5.10起,QGuiApplication::screenAt(QPoint)代替了screenNumber(QPoint)

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

QScreen *screen = widget->window()->windowHandle()->screen();
qDebug() << screen->geometry()
                << screen->availableGeometry();

答案 2 :(得分:0)

除了Sillicomancers的答案,我还使用以下代码替换已描述的QDesktopWidget::availableGeometry(const QWidget *widget)

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

使用widget顶部中间位置的屏幕。