2010-02-04 5 views
7

나는 programmaticaly (Qt 4.6 포함)에서 일련의 QPushButton을 모두 포함하는 창을 함께 구성하려고합니다. 그것은 (나는 도구 상자를 호출하는)과 같이 보일 것입니다 :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

수직 간격 (그리고 전체 배열을 둘러싼 여백). 어떤 도움도 환영합니다.

답변

1

명백하게 이것은 정상적인 것으로 간주됩니다. 닫힌 해당 bug report을 참조하십시오. 해결 방법은 저를 위해 작동하지 않는 것으로보고했습니다.

+0

링크가 종료되었습니다. – Trilarion

+0

작동 링크 : https://bugreports.qt.io/browse/QTBUG-2699 – Taran

0

레이아웃의 크기 제한을 QLayout::SetFixedSize으로 설정 했으므로 Qt는 위젯의 크기 힌트를 고정 된 크기로 사용합니다. Toolbox 클래스의 QWidget::sizeHint() 클래스를 오버라이드해야 모든 버튼에 꼭 맞게 위젯을 만들 수 있습니다 (6 개의 버튼의 경우 너비는 64이고 높이는 96이됩니다).

+0

흠, 나는 두려워하지 않습니다. Toolbox :: sizeHint()를 추가했지만 호출되지 않습니다. –

+0

Toolbox :: sizeHint()는 시도 할 때 호출됩니다. const 멤버 함수로 만드는 것을 잊었을 때 호출되지 않습니다. PiedPiper가 제안한대로 스타일을 변경해야 할 수도 있습니다. –

+0

좋아요, 맞아요, 다른 파일을 편집하고 컴파일하는 또 다른 경우입니다. 죄송합니다. (나는'const' 권한을 가지고있다.) 그러나, 호출 할 때라도 원하는 QSize를 반환 할 수 있으며, 모양을 전혀 변경하지 않는다. 마지막으로, 스타일 설정과 관련하여, 내가 그렇게하면 다른 트릭은 필요하지 않습니다 (그러나 추악합니다). –

0

현재 Qt4.6에서 표준 인 plastique 스타일을 사용하는 경우 QPushButtons의 테두리가 위젯 안에 그려집니다. 다른 스타일 중 하나를 사용해보십시오. 예컨대 : 암술대는 또한는 QWidget ::의 setStyle() 함수를 사용하여 개별 위젯을 설정할 수 있습니다

#include <QGtkStyle> 

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

.

+0

저는 Mac OS에서 작업 중이므로 plastique를 사용하지 않습니다. 사실, 스타일을 plastique로 설정하면 함께 그리는 위젯이됩니다. 그러나 이것들은 그들에게 외계인의 모습을 주므로, 여전히 원시 타입의 솔루션을 환영합니다. –