7
votes

Qt séparateur désactiver

Je veux pouvoir empêcher un utilisateur de déplacer un QSplitter au moment de l'exécution. Calling SetEnabled (FALSE) Est-ce que cela, mais il désactive également tous les widgets enfants - ce que je ne veux pas. Y a-t-il un moyen d'y parvenir? Dois-je désactiver le séparateur, puis réactiver manuellement tous les widgets enfants? Cela semble assez encombrant, pour quelque chose qui doit être une pratique raisonnablement courante.

Quelqu'un peut-il suggérer quelque chose?


0 commentaires

3 Réponses :


0
votes

En réalité, je n'ai jamais vu personne désactivé un séparateur: ils sont là pour que l'utilisateur puisse mettre en place l'interface utilisateur à sa nécessité, alors pourquoi quelqu'un voudrait-il désactiver cela? Soit vous avez besoin d'un séparateur ou vous pouvez utiliser l'une des mises en page normales (que l'utilisateur ne peut pas redimensionner).

Si vous voulez toujours essayer, je pense que vous devriez regarder PLOSESTLEGALPOSITION () < / a> ou GetRange () . Si vous venez de retourner la largeur du widget, alors le redimensionnement devrait cesser de fonctionner.


4 commentaires

Je suppose que cela va être le moyen le plus simple - l'affaire d'utilisation est la suivante: j'ai une interface utilisateur, qui peut être placée dans un certain mode, dans laquelle l'un des widgets enfants du séparateur disparaît. Dans ce cas, je ne veux pas que l'utilisateur puisse bouger le séparateur, car il n'y a qu'un widget d'un côté - cela a-t-il un sens?


Impair. Je suppose que le séparateur n'offrirait pas d'élément de glisser 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 réaliser est de cacher les enfants. Des idées?


Signaler un bug contre Qt. Il devrait être possible de changer le nombre d'enfants pour un complotter. En tant que solution de contournement, j'essaierais de cacher l'ensemble du séparateur le remplacer par une mise en page normale, mais cela signifie que vous devrez dupliquer un enfant: /



0
votes

Vous devez faire deux choses. Définissez les widgets (qui ne devrait pas être redimensionnable) à l'intérieur du séparateur vers fixeSize code> et modifiez le curseur des poignées du séparateur correspondant sur QT :: Arrowcursor Code>. Les poignées commencent avec zéro (gauche et non utilisée), de sorte que la première poignée entre deux widgets est par index 1.

Voici un échantillon (mettre le code dans MAIN.CPP): P>

#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();
 }


0 commentaires

16
votes

Faites ceci:

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


0 commentaires