繁体   English   中英

替换Qt中的小部件

[英]Replace a widget in Qt

我有一个基类,它有一些gui项目,我已设置在Qt创建者中使用设计器的位置。 这些项目是:

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获取所有几何参数?

布局根据窗口小部件提供的提示来处理放置在布局中的窗口小部件,因此调用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中添加的,所以如果你需要支持旧版本,我可以扩展这个答案,以涵盖如何(尝试)手动执行相同操作。 但简而言之,您必须使用正确的QGridLayout :: addWidget重载并确保相关属性(至少包括sizeHintsizePolicy )匹配。

试试这个,它是有效的:

QLineEdit* leAmplitude;
leAmplitude = new QLineEdit(ui->w1->parentWidget());
ui->w1->parentWidget()->layout()->replaceWidget(ui->w1, leAmplitude);
ui->w1 = leAmplitude;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM