簡體   English   中英

使QDialog出現在另一個屏幕中

[英]Make a QDialog appear in a different screen

標題說明了幾乎所有內容:

我有兩個屏幕,每當我創建一個QDialog它都會與它的父屏幕顯示在同一屏幕上。 如何使其顯示在其他屏幕上? 還是應該使用其他類型的頂級窗口小部件?

我用來創建對話框的代碼是:

QDialog my_dialog = new QDialog(this,
                                Qt::WindowMaximizeButtonHint |
                                Qt::WindowCloseButtonHint);

...

編輯:我已經使用也嘗試QDesktopWidget這給了我一個QScreen是指第二個畫面對象。 但是然后我找不到如何指示QDialog使用該QScreen (將其設置為父級是行不通的)。

不好的是,您在不閱讀評論的情況下編輯問題:(

// 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 );

就這樣。

更新:

您應該了解,只有一個帶有通用坐標系的屏幕區域,其中包含所有屏幕。

例如,您有2個分辨率為800x600的監視器。 第一台(主)顯示器位於左側,第二台位於右側。 在這種情況下,可用於您的應用程序的坐標系為1600x600。 因此,如果小部件在第一個監視器上的左上角位置為100x100,並且要將其移動到另一個監視器,則應調用move(900x100); // 900 == screen1.width() + dialog.pos().x() move(900x100); // 900 == screen1.width() + dialog.pos().x() 然后您的小部件將在第二個監視器上具有100x100的位置。

您應該閱讀Qt文檔

您可以在QDialog上使用move ,但是要知道, move會設置QDialog相對於其父對象的位置。

您可以獲取主窗口的屏幕位置,並使用它來設置QDialog位置。 只知道您不能保證最終用戶計算機上有2個屏幕。

有關move更多信息,請參見: http : //doc.qt.io/qt-5/application-windows.html#window-geometry

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM