(en utilisant Qt 4.6.3, x64, Linux)question QGridLayout avec des widgets
Je teste comment insérer correctement les widgets dans un existant un QGridLayout
rempli de divers widgets. Une panne cas est le suivant artificiel:
QApplication app(argc,argv);
QWidget w;
QGridLayout* gl = new QGridLayout(&w);
QLabel* label = new QLabel("Image Size:");
QLineEdit* wedit = new QLineEdit("100");
QLabel* xlabel = new QLabel("x");
wedit->setAlignment(Qt::AlignRight);
gl->addWidget(label);
gl->addWidget(xlabel, 0, 1, 1, 1);
gl->addWidget(wedit, 0, gl->columnCount());
Ce qui crée le widget ci-dessous:
.
En supposant que ont un existant QGridLayout comme ci-dessus, mais sans l'étiquette « x », et je souhaite insérer cela dans la mise en page, la commutation des deux dernières lignes de addWidget peut sembler valable, à savoir:
\\ same as above
gl->addWidget(label);
gl->addWidget(wedit, 0, gl->columnCount());
gl->addWidget(xlabel, 0, 1, 1, 1);
cependant, cela crée les éléments suivants:
le gl->columnCount()
après est encore 2, à la fois comme x-étiquette et le QLineEdit remplissent la même cellule. Sur la base de cette connaissance, le code suivant produit le résultat souhaité initial:
gl->addWidget(label);
gl->addWidget(wedit, 0, 2); // note: specified column 2, columnCount() is now 3
gl->addWidget(xlabel, 0, 1, 1, 1);
Bien que ce ne soit pas particulièrement utile, car la mise en page originale en question ne se construit pas avec des configurations plus tard à l'esprit.
Puisque addWidget permet de spécifier la position de la cellule, ainsi que l'étendue de la ligne/colonne, il semble étrange que Qt ne remplace pas automatiquement les widgets existants dans la mise en page. Quelqu'un at-il une suggestion sur la façon dont je pourrais surmonter cela? Je suppose qu'il serait possible de recréer un QGridLayout et de copier dedans les enfants de l'original, en prenant soin d'insérer le widget supplémentaire au bon endroit. Ceci est cependant moche, et sensible aux problèmes de version Qt (comme je veux modifier un widget intégré).
Modifier:
Je me rends compte que je fais l'hypothèse de penser à une façon QHBoxLayout
, où l'insertion d'un widget est unique compris, alors que dans un QGridLayout
ce n'est pas le cas (?).
Je peux préciser que je voudrais finalement modifier QFileDialog::getSaveFileName
, en insérant un widget (similaire au widget montré ci-dessus) juste au-dessus des deux rangées inférieures (c'est-à-dire ci-dessus "File & Name:").
Merci
S'il y a un moyen de changer la ligne et la colonne des widgets enfants dans le QGridLayout, il pourrait être possible pour faire une fonction qui prend dans un rowIndex, puis décale la ligne de chaque widget enfant dans row rowIndex et supérieur (à savoir plus bas). – swalog
'QFileDialog :: *', je crois, utiliser les boîtes de dialogue de fichier natif si disponible. Donc, je ne pense pas que vous êtes en mesure de modifier leur mise en page en utilisant Qt. – RedX
J'ai effectivement trouvé une solution à mon problème, donc je crois que c'est possible. J'ai toujours des problèmes mineurs avec le widget enfant ciblé initial. Je posterai une solution quand j'aurai réglé les bizarreries et que je l'ai rendu présentable pour examen. – swalog