1. 程式人生 > >窗體的基類中沒有設定大小,所以才不能居中,若要窗體居中,必須使用setfixedsize()函數或者resize()函數設定窗體的大小,居中才能正常使用

窗體的基類中沒有設定大小,所以才不能居中,若要窗體居中,必須使用setfixedsize()函數或者resize()函數設定窗體的大小,居中才能正常使用

argv parent tails comment styles key har 位置 遇到

最近開發中,遇到了窗體不能居中的問題,看了網上的很多文章,窗口居中,無非都是move至窗口的中心目標; 有兩種方式, 一種在構造函數中直接計算中心坐標; 另一種是在窗口show後再move至相應坐標。但是自己在構造函數中添加了對應的句子以後,窗體不在窗口的(0,0)點顯示,反而在右下角顯示,自己很是郁悶。網上的兩種方法,基本操作如下:

方法一:在窗口(QWidget類及派生類)的構造函數中添加如下代碼:

#include <QDesktopWidget>

//.......
QDesktopWidget* desktop = QApplication::desktop(); // =qApp->desktop();也可以

move((desktop->width() - this->width())/2, (desktop->height() - this->height())/2);
//.......

重新編譯後,該窗口啟動時在屏幕居中的位置。

方法二:在調用show()函數後調用move()函數,j將窗口移動到屏幕中央。

#include <QDesktopWidget>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
w.move ((QApplication::desktop()->width() - w.width())/2,(QApplication::desktop()->height() - w.height())/2);

return a.exec();
}

自己按照方法一在構造函數中添加後,窗體還是不能居中,最後才發現,原來是窗體的基類中沒有設定大小,所以才不能居中,若要窗體居中,必須使用setfixedsize()函數或者resize()函數設定窗體的大小,居中才能正常使用。

[cpp] view plain copy
  1. /**
  2. *構建函數中move至中心坐標時, 必須應用setFixedSize(500,500); 否則達不到期望居中顯示的目標
  3. */
  4. ialog:Dialog(QObject *parent=0):QDialog(parent) {
  5. ...
  6. this->setFixedSize(500,500); //這句必須添加
  7. this->setWindowTitle(tr("StyleSheet"));
  8. QDesktopWidget *desk=QApplication::desktop();
  9. int wd=desk->width();
  10. int ht=desk->height();
  11. this->move((wd-width())/2,(ht-height())/2);

[cpp] view plain copy
  1. /**
  2. *方式一: 先顯示後移動會產生窗口閃爍,有點不太好
  3. */
  4. int main(int argc,char **argv) {
  5. QApplication app(argc,argv);
  6. Dialog dialog;
  7. dialog.show();
  8. QDesktopWidget *desk=QApplication::desktop();
  9. int wd=desk->width();
  10. int ht=desk->height();
  11. dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
  12. return app.exec();
  13. }

[cpp] view plain copy
    1. /**
    2. *方式二: 在移動和顯示窗口前重新設置窗口的大小,這樣就能達到期望的效果且不會閃爍
    3. */
    4. int main(int argc,char **argv)
    5. {
    6. QApplication app(argc,argv);
    7. Dialog dialog;
    8. dialog.resize(500,500); //重新設置大小
    9. QDesktopWidget *desk=QApplication::desktop();
    10. int wd=desk->width();
    11. int ht=desk->height();
    12. dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
    13. dialog.show();
    14. }

http://blog.csdn.net/u013394556/article/details/40394079

窗體的基類中沒有設定大小,所以才不能居中,若要窗體居中,必須使用setfixedsize()函數或者resize()函數設定窗體的大小,居中才能正常使用