我需要带有图标的扁平QPushButton。 问题是按钮的大小远远大于图标的大小。 有没有办法根据图标的大小设置按钮的大小,而不使用幻数:
QIcon icon = GetIcon();
QPushButton* btn = new QPushButton( icon, "" );
btn->setFlat( true );
btn->setCheckable( true );
btn->setFixedSize( 16, 16 ); // These values should be calculated from the icon size.
答案 0 :(得分:4)
试试这个。
QIcon ic("://icons/exit_6834.ico");
ui->pushButton_5->setFixedSize(ic.actualSize(ic.availableSizes().first()));//never larger than ic.availableSizes().first()
ui->pushButton_5->setText("");
ui->pushButton_5->setIcon(ic);
ui->pushButton_5->setIconSize(ic.availableSizes().first());
qDebug() << ic.availableSizes();
答案 1 :(得分:2)
通常情况相反,图标应该提供不同的分辨率。但要做到你想要的,你需要找到图标支持的最接近的尺寸,给定初始尺寸作为参考。
static bool less(const QSize& a, const QSize&b)
{
return a.width() < b.width();
}
QSize closestIconSize(const QIcon& icon, QSize initSize)
{
QList<QSize> qlistSizes = icon.availableSizes();
QList<QSize>::const_iterator it = std::lower_bound(
qlistSizes.begin(),
qlistSizes.end(),
less);
return it != qlistSizes.end() ? *it : initSize;
}
由于图标通常为方形,您会注意到我提供的比较函数仅使用QSize
对象中的宽度。