我有一个基类,它有一些 gui 项目,我已经设置了在 Qt creator 中使用设计器的位置。这些项目是:
QWidget* w1;
QWidget* w2;
QWidget* w3;
现在在继承该基类的类中,我想将这些小部件“转换”为 lineEdit 项目,这将保留该小部件的所有几何参数。所以我做了这样的事情:
QLineEdit* leAmplitude;
leAmplitude = new QLineEdit(ui->w1);
leAmplitude->setGeometry(ui->w1->geometry());
ui->glControls->addWidget(leAmplitude);
但是添加的 QLineEdit
项并没有出现在与 w1 项完全相同的位置。它只是添加在 QGridLayout
glControls 中其他控件的底部。如何让 lineEdit 从 w1 中获取所有几何参数?
最佳答案
Layout 根据小部件给出的提示处理放置在布局中的小部件,因此调用 setGeometry
,然后执行 addLayout
是没有用的。此外,将小部件添加到布局会重置其父级,因此将新小部件的父级设置为 ui->w1
也没有用。
幸运的是,有QLayout::replaceWidget方法!就用那个。示例:
QLineEdit* leAmplitude;
leAmplitude = new QLineEdit;
QLayoutItem *previous = ui->glControls->replaceWidget(ui->w1, leAmplitude);
// possibly assert that previous is ui->w1, or just delete it, or whatever
此方法似乎晚于 Qt 5.2 添加,因此如果您需要支持旧版本,我可以扩展此答案以涵盖如何(尝试)手动执行相同操作。但简而言之,您必须使用 right QGridLayout::addWidget overload并确保相关属性(至少包括 sizeHint
和 sizePolicy
)匹配。
关于c++ - 替换 Qt 中的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35382622/