2010-02-04 116 views
7

我正在嘗試構建一個包含一系列QPushButton的programmaticaly(包含Qt 4.6)的窗口,它們全部封裝在一起。它應該看起來像這樣(我稱之爲工具箱):刪除QGridLayout中的所有間距

toolbox image http://img99.imageshack.us/img99/9853/examplezk.png

所以,我創建了一個工具箱類,從QWidget中派生,它具有以下構造:

Toolbox::Toolbox (void) 
    : QWidget (0, Qt::Tool) 
{ 
    setWindowTitle (tr ("Toolbox")); 

    QGridLayout *group = new QGridLayout (this); 
    group->setSpacing (0); 
    group->setContentsMargins (0, 0, 0, 0); 
    group->setSizeConstraint (QLayout::SetFixedSize); 
    setLayout (group); 

    unsigned k = 0; 
    QPushButton *buttons = new QPushButton[6]; 
    for (unsigned i = 0; i < 3; i++) 
    for (unsigned j = 0; j < 2; j++) 
    { 
     buttons[k].setIcon (QIcon ("test.png")); 
     buttons[k].setIconSize (QSize (32, 32)); 
     buttons[k].setContentsMargins (0, 0, 0, 0); 
     buttons[k].setCheckable (true); 
     buttons[k].setAutoExclusive (true); 

     group->addWidget (&buttons[k], i, j); 
     k++; 
    } 
    buttons[1].setChecked (true); 

不知何故,它不工作,我的按鈕沒有最終擠在一起:

result http://img9.imageshack.us/img9/774/resultr.png

我不能設法消除這種已經rtical間距(以及整個陣列周圍的邊距)。歡迎任何幫助。

回答

1

顯然,這被認爲是正常的事情:請參閱相應的bug report,該文件已關閉。報告的解決方法似乎不適用於我。

+0

鏈接現已停止。 – Trilarion 2015-01-05 19:02:52

+0

工作鏈接:https://bugreports.qt.io/browse/QTBUG-2699 – Taran 2015-07-25 14:35:06

0

由於您已將佈局上的大小約束設置爲QLayout::SetFixedSize,Qt將使用該小部件的大小提示作爲其固定大小。您可能需要重寫Toolbox類中的QWidget::sizeHint(),以使窗口小部件完全與需要適合所有按鈕一樣大(在六個按鈕的情況下,寬度爲64,高度爲96)。

+0

嗡嗡聲,恐怕它不起作用。我添加了一個Toolbox :: sizeHint(),但它沒有被調用。 – 2010-02-04 23:11:38

+0

當我嘗試時,Toolbox :: sizeHint()會被調用。當我忘記使其成爲一個const成員函數時,它不會被調用。 PiedPiper建議您可能也必須改變風格。 – 2010-02-05 00:20:08

+0

好吧,對不起,編輯和編譯不同文件的另一種情況。 (儘管我有'const'權限。) 但是,即使被調用,它也可以讓它返回我想要的任何QSize,而且我根本不會改變外觀。 最後,關於設置風格,如果我這樣做,那麼不需要其他技巧(但它很醜)。 – 2010-02-05 08:34:52

0

如果您使用的是現在在Qt4.6中標準的plastique風格,QPushButtons的邊框就是在widget內部繪製的。嘗試使用其他風格之一。例如:

#include <QGtkStyle> 

QApplication a(argc, argv, true); 
a.setStyle("gtk"); 

還可以使用QWidget :: setStyle()函數在單個窗口小部件上設置樣式。

+0

我正在使用Mac OS,所以我沒有使用Plastique。實際上,將樣式設置爲plastique使得它將小部件打包在一起。但是,這給了他們一個外星人的外觀,所以我仍然歡迎使用本機類型的解決方案。 – 2010-02-05 08:30:23