如何识别跨监视器拖动Qt应用程序/窗口小部件的时间

时间:2014-12-03 16:17:04

标签: windows qt

我的基于Qt的应用程序有一个QMainWindow和另一个模态小部件。此模式窗口小部件没有还原选项。当有多个监视器可用时,允许用户在显示器上拖动此窗口小部件。但是,当我的小部件很大,并且用户将其拖动到扩展的监视器(通常是分辨率非常低的投影仪)时,小部件对于屏幕来说太大而且会被切断。

我希望能够检测用户何时移动到不同的屏幕,以便我可以调整窗口小部件(及其内容)的大小以适应新屏幕的尺寸和分辨率。是否有任何Qt为此目的发出的信号?

1 个答案:

答案 0 :(得分:2)

这可能是您正在寻找的函数调用:

http://qt-project.org/doc/qt-5/qdesktopwidget.html#screenNumber

int QDesktopWidget::screenNumber(const QWidget * widget = 0) const
  

返回包含最大部分的屏幕的索引   小部件,如果小部件不在屏幕上,则为-1。

要将此作为信号的一部分使用,您应该对moveEvent的{​​{1}}和resizeEvent进行子类化,并将您的逻辑用于决定如何在此处放置/调整窗口小部件的大小。如果要像拖动到新监视器上的浏览器选项卡一样调整大小,您可能只想使用鼠标点而不是小部件来决定要对哪个监视器做出反应。

所以你的结束代码看起来像这样:

QWidget

其他链接和参考

QMoveEvent

QResizeEvent

QDesktopWidget

http://qt-project.org/doc/qt-5/qdesktopwidget.html#details

http://qt-project.org/doc/qt-5/qapplication.html#desktop

http://qt-project.org/doc/qt-5/qmoveevent.html#details

http://qt-project.org/doc/qt-5/qwidget.html#moveEvent

http://qt-project.org/doc/qt-5/qwidget.html#resizeEvent

http://qt-project.org/doc/qt-5/qrect.html#intersects http://qt-project.org/doc/qt-5/qdesktopwidget.html#availableGeometry-2

void Widget::moveEvent(QMoveEvent * e)
{
    m_newScreenSize = qApp->desktop()->screenGeometry(this);
}

void Widget::mouseReleaseEvent(QMouseEvent * e)
{
    this->resize(m_newScreenSize);
}