2014-12-02 74 views
0

我堅持一個簡單的Qt函數,不適用於我。我做了一個繼承自QMainWindow的 的類和另一個從QWidget繼承的類。然後我從第二個成員對象(一個指向)的第一個元素,並在構建窗口的過程中將其指定爲其中央控件。Qt QWidget :: setGeomerty

當談到調整自己與功能QWidget的:: setGeomerty(在窗口內centraWidget)它根本就沒有work.here是我的代碼:

void MainWindow::show() 
{ 

    //some code that centers my window on the screen 

    int margin=this->width()/7; 

    centralWidget()->setGeometry(margin,centralWidget()->geometry().top(),this->width()-margin,centralWidget()->geometry().bottom()); 

    QMainWindow::show(); 

} 

我知道這可能是愚蠢的,但我只是無法想象它。幫助我。

+0

通常你會打電話來的''MainWindow'我setGeometry'認爲。 – sje397 2014-12-02 04:16:14

+0

你知道如何調整主窗口內的cantralwidget嗎?我只是嘗試了Move()和resize()而不是setGeometry(),它不起作用。 – coucou8949 2014-12-02 04:27:17

+0

添加布局? http://qt-project.org/doc/qt-4.8/layout.html – sje397 2014-12-02 04:28:06

回答

0

QMainWindow有其自己的佈局,其中央區域被中央小部件佔據。因此,打破布局並隨意修改中央小部件的大小/位置並不是非常簡單。 我推薦的是使用一個佔位符中心小部件,並將您的小部件添加爲小孩。 我很肯定你可以通過在「佔位符」中央小部件中設置一個合適的Qt內置佈局,然後將小部件添加到佈局來達到你想要的效果。

+0

我想我只是在做你剛剛說的話。謝謝。吼叫是我的新的和最終的代碼: – coucou8949 2014-12-02 12:13:42

0

佈局是管理我想要的;我認爲這是不可能的,直接在中央物件交出,並嘗試移動/調整它;但通過添加布局和子部件,我們可以處理them.here的是我的代碼:

mainwindow.cpp

//我專注於我的窗口構造

的MainWindow :: MainWindow的(QWidget的*父):
的QMainWindow(父),
m_MainView(新的MainView(本)),
m_WindowLayout(新MainWindLayout(NULL ))/ /我的自定義佈局女巫只是從QGridLayout繼承

{

//............. 
setCentralWidget(m_MainView); 
m_WindowLayout=new MainWindLayout(m_MainView);//my layout set into my central Widget"m_MainView". 
QWidget *temp(dynamic_cast<QWidget *>(m_MainView->centralView()));//centralView() returns a child QWidget of my central Widget 
QMargins margins(this->width()/5,0,this->width()/5,0);//setting up layout margins :left,top,right,bottom;exactly what i need 
m_WindowLayout->setContentsMargins(margins); 
m_WindowLayout->addWidget(temp,0,0,-1,-1);//adding my child widget to the layout filling all cells of the gridlayout. 

}

謝謝大家