如何根据图标大小调整QPushButton的大小?

6

我需要一个带图标的扁平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.
2个回答

7

试试这个。

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();

2
通常情况下,图标应该提供不同的分辨率。但是为了实现您想要的效果,您需要找到最接近参考大小支持的图标尺寸。请注意保留HTML标签。
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(),
                                       initSize,
                                       less);
    return it != qlistSizes.end() ? *it : initSize;
}

由于图标通常是正方形的,因此您会注意到我提供的比较函数只使用QSize对象中的宽度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接