QListWidget的IconMode使用setItemWidget,item控件有几率显示异常是怎么回事?

发布于 2022-09-04 01:06:32 字数 812 浏览 12 评论 0

首先我的功能是点击一下按钮就往QListWidget添加一个Item,但是添加两三个后其中一个控件一直不正常(通常是倒数第2个,偶尔会是其它的,甚至两个)
图片描述

继续添加一次,之前显示不正常的控件又正常了。。。
图片描述

这是代码
图片描述

以上问题的排查,
QListWidget使用IconMode,不用setItemWidget来自定义控件一切正常,
QListWidget不用IconMode,使用setItemWidget来自定义控件也一切正常。

后来,我的代码里的QComboBox设置最小大小为80*50,不会出现上面的显示异常,又变成这样子了

图片描述

我在Qt 5.6.0 以及 5.7 测试了都有这个问题

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弄潮 2022-09-11 01:06:32
参考代码
    ui->ltWidget->setViewMode(QListView::IconMode); // 默认list mode 上下排列, icon 左右排列
    ui->ltWidget->setResizeMode( QListView::Adjust ); // 根据list widget 容器大小, 动态调整布局位置
    ui->ltWidget->setSpacing(10); // 设置间隔10

    for(int i=0; i < 5; ++i)
    {
        QListWidgetItem *item = new QListWidgetItem(ui->ltWidget);
        item->setSizeHint(QSize(80,50));
        QComboBox *box = new QComboBox;
        box->addItems(QStringList() << "1" << "2");
        ui->ltWidget->addItem(item);
        ui->ltWidget->setItemWidget(item, box);
    }
效果图

图片描述

逆光飞翔i 2022-09-11 01:06:32

我也出现过 Item显示位置大小不正确的情况,追代码发现是
在Item Layout过程中,代理中updateEditorGeometry采用的style计算的 位置有问题

QAbstractItemDelegate *delegate = d->delegateForIndex(index);
if (delegate)
   delegate->updateEditorGeometry(editor, option, index);

所以为ListWidget设置个Delegate,覆写updateEditorGeometry方法
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{// option.rect属性中保存了Item的位置

editor->setGeometry(option.rect); 

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文