Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何根据QPushButton的大小调整其大小';s图标?_Qt - Fatal编程技术网

Qt 如何根据QPushButton的大小调整其大小';s图标?

Qt 如何根据QPushButton的大小调整其大小';s图标?,qt,Qt,我需要带图标的平面按钮。 问题是按钮的大小远远大于图标的大小。 有没有一种方法可以根据图标的大小设置按钮的大小,而不使用幻数: QIcon icon = GetIcon(); QPushButton* btn = new QPushButton( icon, "" ); btn->setFlat( true ); btn->setCheckable( true ); btn->setFixedSize( 16, 16 ); // These values should be

我需要带图标的平面按钮。 问题是按钮的大小远远大于图标的大小。 有没有一种方法可以根据图标的大小设置按钮的大小,而不使用幻数:

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.
试试这个

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();
qiconic(“://icons/exit6834.ico”);
ui->按钮_5->设置固定大小(ic.actualSize(ic.availableSizes().first())//永远不要大于ic.availableSizes().first()
用户界面->按钮_5->设置文本(“”);
ui->按钮_5->设置图标(ic);
用户界面->按钮_5->设置图标化(ic.availableSizes().first());

qDebug()通常相反,图标应该提供不同的分辨率。但要做您想要做的事情,您需要找到图标支持的最接近的大小,给定初始大小作为参考

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;
}
static bool less(常数QSize&a、常数QSize&b)
{
返回a.width()
由于图标通常是方形的,您会注意到我提供的比较函数仅使用
QSize
对象中的宽度