gpt4 book ai didi

c++ - 插入小部件的 QGridLayout 问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:31 25 4
gpt4 key购买 nike

(使用 Qt 4.6.3、x64、linux)

我正在测试如何将小部件正确插入到现有的 QGridLayout 中,该布局中充满了各种小部件。一个分解的人为案例如下:

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

创建以下小部件:

Valid XHTML .

假设上面有一个现有的 QGridLayout,但没有“x”标签,并且我希望将其插入到布局中,切换后两个 addWidget 行可能看起来有效,即:

\\ same as above
gl->addWidget(label);
gl->addWidget(wedit, 0, gl->columnCount());
gl->addWidget(xlabel, 0, 1, 1, 1);

然而,这会创建以下内容:

Valid XHTML

这之后的 gl->columnCount() 仍然是 2,因为 x-label 和 QLineEdit 都填充了同一个单元格。基于这些知识,以下代码产生了最初期望的结果:

gl->addWidget(label);
gl->addWidget(wedit, 0, 2); // note: specified column 2, columnCount() is now 3
gl->addWidget(xlabel, 0, 1, 1, 1);

虽然这不是特别有用,因为所讨论的原始布局并未考虑到以后的布局。

由于 addWidget 允许指定单元格位置以及行/列跨度,因此 Qt 不会自动替换布局中现有的小部件似乎很奇怪。有没有人建议我如何克服这个问题?我假设可以重新创建一个 QGridLayout 并将原始组件的子组件复制到其中,注意将附加的小部件插入正确的位置。然而,这很丑陋,并且容易受到 Qt 版本问题的影响(因为我想修改一个内置的小部件)。

编辑:

我意识到我正在假设以 QHBoxLayout 方式思考,其中插入小部件是唯一理解的,而在 QGridLayout 中这不是大小写(?)。

我可以澄清一下,我最终想修改 QFileDialog::getSaveFileName,方法是在下面两行的正上方(即“File &Name: ").

谢谢

最佳答案

切换后两行 addWidget 无效。对于以下代码:

gl->addWidget(label);
gl->addWidget(wedit, 0, gl->columnCount());
gl->addWidget(xlabel, 0, 1, 1, 1);

addWidget() 调用的参数在添加小部件之前进行评估。因此,对于第二次调用,gl->columnCount() 的计算结果为 1 而不是 2,因为仍然需要创建该列。您实际上是在第一列中添加了两个小部件。

关于c++ - 插入小部件的 QGridLayout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com