0

アイコンと QSlider を含む qlistview を含む単純なウィジェットを作成しています。ウィジェットは Qt Designer で作成されます。私がやろうとしているのは、アイコンを QListView の高さに正確に合わせて、アイコンが 1 行になるようにすることです。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->commandListView->geometry().height() を呼び出しても実際の qlistview の高さが得られないことです。また、ui->commandListView->height() または ui->commandListView->frameGeometry( )。身長()。

4

1 に答える 1

0

私は実際に解決策を見つけました。あなたのウェブサイトの別の投稿で、レイアウト内のウィジェットのサイズは、画面に表示される直前にのみ計算されることがわかりました。そのため、showEvent() 関数をオーバーライドし、showEvent 関数で QListView とモデルのアイコンのサイズを初期化しました。また、bool 値を使用して、最初の showEvent() に対してのみこれを行うようにします。よりエレガントなソリューションはありませんか?

于 2012-11-15T15:45:34.213 に答える