2012-08-30 27 views
4

我開始學習QT。當我創建一個主窗口和ANE佈局放置一些小部件就可以了,有窗口和窗口小部件的邊緣之間的間隙,這樣的:QM 4.8填充QMainWindow

enter image description here

我怎樣才能關掉這個差距?

layout()->setContentsMargins(0,0,0,0); 並編輯窗口樣式表,但沒有效果。我該怎麼辦?

回答

5

A QMainWindowQDialogQWidget略有不同,因爲它具有「中央控件」的概念。該窗口具有預定義的區域來處理像工具欄和菜單和停靠欄之類的東西,並將中央窗口小部件定義爲窗口的主要內容。窗口本身通常不會分配佈局。但我假設你正在做的是在Windows佈局上設置值(這不會產生影響)。

您設置爲中央小部件的小部件很可能會有自己的佈局。中央小部件默認可以擴展到邊緣。首先考慮這個例子:

#include <QApplication> 
#include <QMainWindow> 
#include <QVBoxLayout> 
#include <QListWidget> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QMainWindow *window = new QMainWindow; 
    window->resize(800,600); 

    QListWidget *listWidget = new QListWidget; 
    window->setCentralWidget(listWidget); 

    window->show(); 

    return a.exec(); 
} 

你會看到列表部件完全展開到邊緣。但是,在一個更現實的例子:

#include <QApplication> 
#include <QMainWindow> 
#include <QVBoxLayout> 
#include <QListWidget> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QMainWindow *window = new QMainWindow; 
    window->resize(800,600); 

    QWidget *central = new QWidget; 
    QListWidget *listWidget = new QListWidget; 

    QVBoxLayout *layout = new QVBoxLayout; 
    layout->addWidget(listWidget); 

    //Uncomment this following line to remove margins 
    //layout->setContentsMargins(0,0,0,0); 

    central->setLayout(layout); 

    window->setCentralWidget(central); 

    window->show(); 

    return a.exec(); 
} 

你有一個容器控件,然後將其與佈局組成,並且列表控件。這個中心部件的佈局是引入邊緣的那個。

+0

那麼我們如何擺脫這些利潤? – PTBG

+0

@PTBG:只需取消註釋將佈局內容邊距設置爲0的那一行即可。 – jdi