我正在将 Qt 4.8.x 程序移植到 Qt 5.3。当我的 Ubuntu 12.04 X11 服务器使用 Nvidia 硬件运行 Xinerama 模式时,它在 Qt 4.8 下运行良好。
我以前使用 QtDesktopWidget 来检索多个屏幕及其几何图形(我有五个连接的显示器)。在 Xinerama 模式下的 Qt 5.3 下,QDesktopWidget::screenCount() 仅返回 1 个屏幕,即所有五个屏幕的并集。在 Qt 4.8 下,它将正确返回 5 个屏幕及其正确的几何形状。
接下来我尝试在使用 Qt 5.3 禁用 Xinerama 的情况下运行我的 X 服务器。现在,我可以使用 QDesktopWidget 正确获取正确的 screenCount 并且 QApplication:screens() 返回正确的 Screen * 我可以访问的列表。
但是,每当我尝试使用 QWindow::setScreen 在其中一个屏幕中打开一个窗口时,无论我在 QWindow 的构造函数中设置哪个屏幕或使用 QWindow::setScreen,该窗口总是在主屏幕中打开。
当我尝试使用 X11 参数(例如:myapp --display :0.2)在另一个屏幕中打开我的 Qt 应用程序时,它工作正常。
但是,我需要以编程方式执行此操作,因为每个显示器都有不同的内容。有没有人在打开或不打开 Xinerama 模式的情况下成功地在 Qt5 的其他屏幕上打开窗口?我不希望在 QDesktopWidget 上使用 Xinerama,它似乎仅基于 libxcb 构建。
问候,维克多