2014-02-07 55 views
5

有沒有辦法只是初始化QDialog的寬度和高度,而不使用ui文件改變x和y座標?我只是有一個簡單的QDialog,並且只想設置寬度和高度,並且將x和y自動設置爲父級的中心,但是當我嘗試setGeometry時,繼承的幾何體的x和y是0. x當使用ui文件創建對話框時,y會被設置?如何設置QDialog的寬度和高度,並允許自動窗口放置

class MyDialog : public QDialog 
{ 
    MyDialog::MyDialog(QWidget *parent) : 
     QDialog(parent) 
    { 
     setGeometry(geometry().x(), geometry().y(), 200, 400); 
    } 
} 
+1

嘗試調整大小,而不是setGeometry,調整如你預期應該工作:https://qt-project.org/doc/qt-5/qwidget.html#size-prop – Zlatomir

+0

OK,那種作品,但x和y不以中心爲基礎在新的寬度和高度上。 – Alex

回答

3

使用帶有resize代替setGeometry,如你預期它應該工作。

+0

沒錯,但是現在對話框看起來像是被打開的,有人調整了它的大小。它不會像使用ui gui設計器創建它那樣居中 – Alex

2

我有更好的解決辦法:

class MyDialog : public QDialog 
{ 
    MyDialog::MyDialog(QWidget *parent) : 
     QDialog(parent) 
    { 
     int nWidth = 300; 
     int nHeight = 400; 
     if (parent != NULL) 
      setGeometry(parent->x() + parent->width()/2 - nWidth/2, 
       parent->y() + parent->height()/2 - nHeight/2, 
       nWidth, nHeight); 
     else 
      resize(nWidth, nHeight); 
    } 
} 
1

我想擴展您的解決方案,與第二顯示器也工作於系統(即使這是一個古老的線程...):

... 
if (parent != NULL) 
    QPoint parentPos = parent->mapToGlobal(parent->pos()); 
    setGeometry(parentPos.x() + parent->width()/2 - nWidth/2, 
       parentPos.y() + parent->height()/2 - nHeight/2, 
       nWidth, nHeight); 
else 
... 

馬塞爾

相關問題