windows - 如何识别 Qt 应用程序/小部件何时跨显示器拖动

标签 windows qt

我的基于 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.

要将其用作信号的一部分,您应该将 QWidgetmoveEventresizeEvent 子类化,并放置您的逻辑来决定如何在那里放置/调整您的小部件的大小。如果您想像将浏览器选项卡拖到新显示器上一样调整大小,您可能只想使用鼠标点而不是小部件来决定对哪个显示器使用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/

相关文章:

c++ - Qt 最小部署

qt - 如何将字体粗体设置为表格小部件中的特定行

c++ - CMake和QT多重定义

c++ - 将 QList append 到 QList<QList>

c++ - 如何在 GUI 窗口中使用 WinApi (GDI) 在 C++ 中设置鼠标单击像素?

c# - 如何获取有关最近连接的 USB 设备的信息?

c++ - QXmlStreamReader (Qt5) : get all sub-elements inside a tag

windows - 是否可以使用 Python/Scapy for Windows 编写简单的防火墙?

windows - 通过批处理文件在 GIT 中创建修改文件的存档

c++ - 如何在控制台窗口中找到光标的坐标?