2009-10-20 9 views
5

사용자가 런타임에 QSplitter를 이동하지 못하도록하고 싶습니다. setEnabled(false)을 호출하면이 작업이 수행되지만 모든 자식 위젯도 사용할 수 없게됩니다. 이것을 달성 할 수있는 방법이 있습니까? 분할기를 사용 중지 한 다음 모든 하위 위젯을 수동으로 다시 활성화해야합니까? 그것은 합리적으로 일반적인 관행이어야하는 무언가를 위해 다소 성가신 것 같습니다.Qt 스플리터 사용 안 함

아무도 제안 할 수 있습니까?

답변

1

실제로 스플리터를 사용하지 않는 사람은 본 적이 없습니다. 사용자가 필요에 따라 UI를 레이아웃 할 수 있으므로 왜이 기능을 사용하지 않으려합니까? Splitter가 필요하거나 일반 레이아웃 (사용자가 크기를 조정할 수 없음) 중 하나를 사용할 수 있습니다.

시도하고 싶다면 closestLegalPosition() 또는 getRange()을보아야합니다. 위젯의 폭만 반환하면 크기 조정이 작동하지 않아야합니다.

+1

나는 그 가장 쉬운 방법이 될 것 같아요 - 사용 사례는 이것이다 : 스플리터의 아이의 하나, 내가 어떤 모드로 전환 할 수있는 UI를 가지고 위젯이 사라집니다. 이 경우, 한쪽에 위젯 만 있기 때문에 사용자가 스플리터를 이동할 수 없도록하려는 것입니다. – Thomi

+0

Odd. 나는 스플리터가 단 하나의 자식을 가질 때 드래그 요소를 제공하지 않을 것이라고 생각한다. 정말로 한 명의 아이 만 있다는 것을 확인할 수 있습니까? –

+0

글쎄, 실제로 스플리터에서 위젯을 제거 할 수 없습니다. QSplitter 공용 API는이를 수행하는 메소드를 제공하지 않습니다. 성취 할 수있는 최선의 방법은 아이들을 숨기는 것입니다. 어떤 아이디어? – Thomi

0

두 가지 작업을 수행해야합니다. 스플리터 내의 위젯 (크기를 재조정 할 수 없음)을 FixedSize으로 설정하고 해당 스플리터 핸들의 커서를 Qt::ArrowCursor으로 변경하십시오. 핸들 (왼쪽 아니라 사용) 제로로 시작하므로 두 위젯의 제 핸들 1. 여기

은 샘플 (MAIN.CPP의 코드를 입력) 색인하는 것이다 : 지금

#include <QtGui> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QWidget window; 
    window.resize(800, 300); 
    window.setWindowTitle("Splitter Test"); 
    window.show(); 

    QSplitter *splitter = new QSplitter(&window); 
    QListView *listview = new QListView; 
    QTreeView *treeview = new QTreeView; 
    QTextEdit *textedit = new QTextEdit; 

    splitter->addWidget(listview); 
    splitter->addWidget(treeview); 
    splitter->addWidget(textedit); 
    splitter->setChildrenCollapsible(false); 

    splitter->show(); 
    listview->show(); 
    treeview->show(); 
    textedit->show(); 

    //make the lisview 'fix' 
    listview->setFixedSize(listview->width(), listview->height()); 
    //change the cursor over the splitter handle between listview and 
    //treeview to ArrowCursor 
    splitter->handle(1)->setCursor(Qt::ArrowCursor);; 

    return app.exec(); 
} 

첫 번째 분할 자 핸들은 disabled이고 두 번째는 작동합니다.

10

이 작업을 수행 :

for (int i = 0; i < splitter->count(); i++) 
{ 
    QSplitterHandle *hndl = splitter->handle(i); 
    hndl->setEnabled(false); 
}