사용자가 런타임에 QSplitter를 이동하지 못하도록하고 싶습니다. setEnabled(false)
을 호출하면이 작업이 수행되지만 모든 자식 위젯도 사용할 수 없게됩니다. 이것을 달성 할 수있는 방법이 있습니까? 분할기를 사용 중지 한 다음 모든 하위 위젯을 수동으로 다시 활성화해야합니까? 그것은 합리적으로 일반적인 관행이어야하는 무언가를 위해 다소 성가신 것 같습니다.Qt 스플리터 사용 안 함
아무도 제안 할 수 있습니까?
사용자가 런타임에 QSplitter를 이동하지 못하도록하고 싶습니다. setEnabled(false)
을 호출하면이 작업이 수행되지만 모든 자식 위젯도 사용할 수 없게됩니다. 이것을 달성 할 수있는 방법이 있습니까? 분할기를 사용 중지 한 다음 모든 하위 위젯을 수동으로 다시 활성화해야합니까? 그것은 합리적으로 일반적인 관행이어야하는 무언가를 위해 다소 성가신 것 같습니다.Qt 스플리터 사용 안 함
아무도 제안 할 수 있습니까?
실제로 스플리터를 사용하지 않는 사람은 본 적이 없습니다. 사용자가 필요에 따라 UI를 레이아웃 할 수 있으므로 왜이 기능을 사용하지 않으려합니까? Splitter가 필요하거나 일반 레이아웃 (사용자가 크기를 조정할 수 없음) 중 하나를 사용할 수 있습니다.
시도하고 싶다면 closestLegalPosition() 또는 getRange()을보아야합니다. 위젯의 폭만 반환하면 크기 조정이 작동하지 않아야합니다.
두 가지 작업을 수행해야합니다. 스플리터 내의 위젯 (크기를 재조정 할 수 없음)을 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
이고 두 번째는 작동합니다.
이 작업을 수행 :
for (int i = 0; i < splitter->count(); i++)
{
QSplitterHandle *hndl = splitter->handle(i);
hndl->setEnabled(false);
}
나는 그 가장 쉬운 방법이 될 것 같아요 - 사용 사례는 이것이다 : 스플리터의 아이의 하나, 내가 어떤 모드로 전환 할 수있는 UI를 가지고 위젯이 사라집니다. 이 경우, 한쪽에 위젯 만 있기 때문에 사용자가 스플리터를 이동할 수 없도록하려는 것입니다. – Thomi
Odd. 나는 스플리터가 단 하나의 자식을 가질 때 드래그 요소를 제공하지 않을 것이라고 생각한다. 정말로 한 명의 아이 만 있다는 것을 확인할 수 있습니까? –
글쎄, 실제로 스플리터에서 위젯을 제거 할 수 없습니다. QSplitter 공용 API는이를 수행하는 메소드를 제공하지 않습니다. 성취 할 수있는 최선의 방법은 아이들을 숨기는 것입니다. 어떤 아이디어? – Thomi