c++ - 替换 Qt 中的小部件

标签 c++ qt user-interface inheritance qwidget

我有一个基类,它有一些 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并确保相关属性(至少包括 sizeHintsizePolicy)匹配。

关于c++ - 替换 Qt 中的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35382622/

相关文章:

c++ - 如何去序列化一个大型的,复杂的对象?

c++ - 获取大于数字的元素个数

qt - 如何正确更改TableView的行高?

使用 Squish 或其他工具进行 Qt-GUI 测试

macos - 如何制作 Cocoa 工具栏图像

Android - 图像按钮比例

c++ - 将 csv 文件的一行拆分为 std::vector?

c++ - 如何制作一个 boost 多索引复合范围语句,相当于 where x AND y?

c++ - CMake 不适用于 OSX 上的 C++11

python - 在pyqt5中的QWidget上实现dragMoveEvent?