Tienes que hacer dos cosas. Establezca los widgets (que no deberían ser redimensionables) dentro del divisor en FixedSize
y cambie el cursor de los controladores del divisor correspondiente al Qt::ArrowCursor
. Los mangos comienzan con cero (usado izquierda y no), por lo que el primer mango entre dos widgets es por el índice 1.
He aquí una muestra (poner el código en 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();
}
Ahora el el primer manipulador del divisor es disabled
y el segundo funciona.
supongo que va a ser la forma más fácil - el caso de uso es la siguiente: Tengo una interfaz de usuario, que se puede poner en un cierto modo, en el que uno de los niños del divisor widgets desaparece. En ese caso, no quiero que el usuario pueda mover el divisor, ya que solo hay un widget en un lado, ¿tiene sentido? – Thomi
Impar Supongo que el divisor no ofrecería un elemento de arrastre cuando solo tiene un hijo. ¿Puedes verificar que realmente solo hay un solo hijo? –
Bueno, en realidad no se puede eliminar un widget del separador: la API pública de QSplitter no proporciona un método para hacerlo. Lo mejor que puedes lograr es esconder a los niños. ¿Algunas ideas? – Thomi