问题
软件功能:每点击一次新建按钮,在QListWidget 新增一行自定义控件,主窗口和自定义窗口如下。
- 主窗口:
- 自定义窗口
问题代码:
Form *myform = new Form();
QListWidgetItem *item = new QListWidgetItem(ui->listWidget);
ui->listWidget->addItem(item);
ui->listWidget->setItemWidget(item, myform);
item->setSizeHint(myform->sizeHint());
运行后,在使用QListWidget 存放自定义控件窗口时,窗口不显示。
解决方法1
将自定义控件widget设置布局,如下
然后重新运行代码
解决方法2
在最开始的问题代码上修改
将item 获取的控件尺寸由sizeHint()
改为size()
void MyWidget::on_pushButton_clicked()
{
Form *myform = new Form();
QListWidgetItem *item = new QListWidgetItem(ui->listWidget);
ui->listWidget->addItem(item);
ui->listWidget->setItemWidget(item, myform);
//item->setSizeHint(myform->sizeHint());
item->setSizeHint(myform->size());
}
运行代码,结果如下
两种方法显示结果是有一些差别
myform->size()
和 myform->sizeHint()
在 Qt 中具有不同的含义和用途:
myform->size()
:
size()
方法返回QWidget
对象当前的大小。
这个大小通常由用户或布局管理器设置,或者在窗口被调整大小时由系统自动计算。
通常用于获取 QWidget
对象的实际大小。
2. myform->sizeHint()
:
sizeHint()
方法返回 QWidget
对象的建议大小,即该对象希望具有的大小。
这个大小通常由 QWidget
子类重写该方法来提供一个默认的推荐大小,以便布局管理器在需要时可以使用它。
当将 QWidget
添加到布局中时,布局管理器可能会使用sizeHint()
来确定该部件的理想大小。