如何正确获取QListView的大小

时间:2012-11-14 10:30:55

标签: qt qlistview

我正在创建一个包含带有图标和QSlider的qlistview的简单小部件。该小部件是使用Qt Designer创建的。我想要做的是让我的图标完全符合QListView的高度,这样我就有了一行图标。我试图通过使用从QWidget继承的函数来读取qlistview的高度,但我不断得到一个值,它始终小于QListView的实际大小。有关此行为的任何提示吗?

我在下面提供部分代码。

表单的构造函数:

SliderWithButtons::SliderWithButtons(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SliderWithButtons)
{
    ui->setupUi(this);



    //ui->commandListView->setStyleSheet(" QListView { background-color: lightgray }");
    ui->commandListView->setViewMode(QListView::IconMode);
    ui->commandListView->setFlow(QListView::LeftToRight);
    ui->commandListView->setWrapping(true);
    ui->commandListView->setMovement(QListView::Static);
    ui->commandListView->setResizeMode(QListView::Adjust);
    ui->commandListView->setLayoutMode(QListView::SinglePass);

    **mIconWidth = ui->commandListView->geometry().height();
    mIconHeight = mIconWidth;**

    ui->commandListView->setGridSize(QSize(mIconWidth,mIconHeight));
    ui->commandListView->setIconSize(QSize(mIconWidth,mIconHeight));

    **iconList = new IconList(this,mIconWidth, mIconHeight);**
    iconList->addIcons();

    ui->commandListView->setModel(iconList);
}

我的模型的数据功能:

QVariant IconList::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();

    if (role == Qt::DecorationRole)
        return QIcon(mIcons.value(index.row()).scaled(mIconWidth, mIconHeight,
                         Qt::KeepAspectRatio, Qt::SmoothTransformation));

    return QVariant();
}

窗口小部件仅包含垂直布局中的QListView和QSlider。问题是对ui-> gt; commandListView-> geometry()。height()的调用没有给出真正的qlistview高度,我还有trie ui-> commandListView-> height()或ui-> commandListView-> frameGeometry()高度()

1 个答案:

答案 0 :(得分:0)

我实际上找到了一个解决方案。在您网站的另一篇文章中,我发现布局中小部件的大小仅在它们在屏幕上显示之前不久计算。所以我重写了showEvent()函数,并在showEvent函数中初始化了我的QListView中的图标大小以及我的模型。我还使用bool值来确保我只为第一个showEvent()执行此操作。是不是有更优雅的解决方案?

相关问题