问题
with functions
QApplication::desktop()->screenCount();
QApplication::desktop()->screenGeometry();
I find how much screens exist on my system and on which screen coordinates they are located. Now I want to find out on which screen a QWidget is located at. How can I do that? Do I have to check the coordinates of the QWidget against the screen-coordinates or is there a more elegant way for this which returns the screen-number directly?
Thanks!
回答1:
I think the function you should be looking for is this
int QDesktopWidget::screenNumber(const QPoint &point) const
This is an overloaded function. Returns the index of the screen that contains the point, or the screen which is the shortest distance from the point.
since i don't have multiple screens, you can check for yourself, the QWidget::pos() function provides the QPoint
Edit: As suggested by scopchanov in comments, you can also use
QDesktopWidget::screenNumber(const QWidget *widget = Q_NULLPTR)
回答2:
QDesktopWidget
is deprecated in newer Qt versions (5.11 and above, not deprecated in 5.10).
Since Qt 5.10 there is QGuiApplication::screenAt(QPoint)
as a replacement for screenNumber(QPoint)
.
Seems there is no direct replacement for screenNumber(QWidget*)
. However, it is possible to get information about the screen where the widget in question is located through QScreen
pointer:
QScreen *screen = widget->window()->windowHandle()->screen();
qDebug() << screen->geometry()
<< screen->availableGeometry();
回答3:
In addition to Sillicomancers answer, I use the following code to replace the depricated QDesktopWidget::availableGeometry(const QWidget *widget)
QScreen* pScreen = QGuiApplication::screenAt(widget->mapToGlobal({widget->width()/2,0}));
QRect availableScreenSize = pScreen->availableGeometry();
which uses the screen where the middle of the top of widget
is located.
来源:https://stackoverflow.com/questions/49167204/find-screen-a-qwidget-is-located-on