【问题标题】:Find screen a QWidget is located on查找 QWidget 所在的屏幕
【发布时间】:2018-03-08 07:01:21
【问题描述】:

有功能

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

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

【问题讨论】:

    标签: qt qt5


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 不知何故对我不起作用(Windows,Qt5.13)。
    【解决方案2】:

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

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

    这是一个重载函数。 返回包含该点的屏幕的索引,或距离该点最近的屏幕。

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

    编辑: 正如 cmets 中的 scopchanov 所建议的,您也可以使用

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

    【讨论】:

      【解决方案3】:

      除了 Sillicomancers 的回答,我用下面的代码替换了被贬低的QDesktopWidget::availableGeometry(const QWidget *widget)

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-07-04
          • 2012-05-10
          • 2013-08-08
          • 2017-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-09
          相关资源
          最近更新 更多