我的基于 Qt 的应用程序有一个 QMainWindow 和另一个模式小部件。该模式小部件没有恢复选项。当多个显示器可用时,用户可以在显示器上拖动此小部件。但是,当我的小部件很大,并且用户将其拖动到扩展显示器(通常是分辨率非常低的投影仪)时,小部件对于屏幕来说太大并被剪切。
我希望能够检测用户何时移动到不同的屏幕,以便我可以调整小部件(及其内容)的大小以适应新屏幕的尺寸和分辨率。 Qt 是否为此目的发出任何信号?
最佳答案
这可能是您正在寻找的函数调用:
http://qt-project.org/doc/qt-5/qdesktopwidget.html#screenNumber
int QDesktopWidget::screenNumber(const QWidget * widget = 0) const
Returns the index of the screen that contains the largest part of widget, or -1 if the widget not on a screen.
要将其用作信号的一部分,您应该将 QWidget
的 moveEvent
和 resizeEvent
子类化,并放置您的逻辑来决定如何在那里放置/调整您的小部件的大小。如果您想像将浏览器选项卡拖到新显示器上一样调整大小,您可能只想使用鼠标点而不是小部件来决定对哪个显示器使用react。
所以你的最终代码可能看起来像这样:
void Widget::moveEvent(QMoveEvent * e)
{
m_newScreenSize = qApp->desktop()->screenGeometry(this);
}
void Widget::mouseReleaseEvent(QMouseEvent * e)
{
this->resize(m_newScreenSize);
}
其他链接和引用
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
const QRect QDesktopWidget::availableGeometry(const QWidget * widget) const
关于windows - 如何识别 Qt 应用程序/小部件何时跨显示器拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27276553/