标题几乎全是:
我有两个屏幕,每次创建QDialog
时,它都显示在与其父屏幕相同的屏幕上。
如何让它出现在不同的屏幕上?或者我应该使用不同类型的顶级窗口小部件吗?
我用来创建对话框的代码是:
QDialog my_dialog = new QDialog(this,
Qt::WindowMaximizeButtonHint |
Qt::WindowCloseButtonHint);
...
修改
我也尝试使用QDesktopWidget,它为我提供了一个引用第二个屏幕的QScreen
对象。但后来我找不到如何指示QDialog
使用QScreen
(将其设置为父母没有工作)。
答案 0 :(得分:3)
在不阅读评论的情况下编辑问题是不好的:(
// Your screen geometry:
QRect buildScreenGeometry()
{
auto desktop = QApplication::desktop();
QRect virtualRect;
const auto n = desktop->screenCount();
for ( auto i = 0; i < n; i++ )
virtualRect |= desktop->screenGeometry(i);
return virtualRect;
}
// Moving
auto dlg = new QDialog( someParent );
auto newPoint = QPoint( 2000, 0 ); // point on another screen
auto realPos = someParent->mapFromGlobal( newPoint );
dlg->move( realPos );
就是这样。
<强>更新强>
你应该明白,只有一个屏幕区域有COMMON坐标系,它包含所有屏幕。
例如,您有2台800x600分辨率的显示器。第一(主)监视器向左站立,第二站立在右侧。在这种情况下,适用于您的应用程序的坐标系为1600x600。因此,如果您的小部件在第一台显示器上的左上角位置为100x100,并且您想将其移动到另一台,则应调用move(900x100); // 900 == screen1.width() + dialog.pos().x()
。然后你的小部件在第二台显示器上将有100x100的位置。
您应该阅读Qt documentation。
答案 1 :(得分:1)
您可以在move
上使用QDialog
,但请注意,move
会将QDialog
位置设置为相对于其父级的位置。
您可以获取主窗口的屏幕位置,并使用它来设置QDialog
位置。只知道你不能保证最终用户机器上有2个屏幕。
有关move
的详情,请参阅:http://doc.qt.io/qt-5/application-windows.html#window-geometry