Vous devez faire deux choses. Définissez les widgets (qui ne doivent pas être redimensionnables) à l'intérieur du séparateur sur FixedSize
et modifiez le curseur des poignées du séparateur correspondant en Qt::ArrowCursor
. Les poignées commencent à zéro (à gauche et non utilisés), de sorte que la première poignée entre deux widgets est par index 1.
Voici un échantillon (mettre le code dans 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();
}
Maintenant, la la première poignée du diviseur est disabled
et la seconde fonctionne.
Je suppose que ça va être la meilleure façon - le cas d'utilisation est la suivante: Je ui, qui peut être mis dans un certain mode, dans lequel l'un de l'enfant du séparateur les widgets disparaissent. Dans ce cas, je ne veux pas que l'utilisateur puisse déplacer le séparateur, puisqu'il n'y a qu'un widget d'un côté - est-ce logique? – Thomi
Impair. Je suppose que le séparateur n'offrirait pas un élément de traînée quand il n'a qu'un seul enfant. Pouvez-vous vérifier qu'il n'y a vraiment qu'un seul enfant? –
Eh bien, vous ne pouvez pas réellement supprimer un widget du séparateur - l'API publique QSplitter ne fournit pas de méthode pour le faire. Le mieux que vous puissiez faire est de cacher les enfants. Des idées? – Thomi