2017-02-02 6 views
1

Я создал простой 10x10 черный ящик и добавить его в QToolButton следующим образом:Как центрировать значок в QToolButton?

QIcon minIcon; 
minIcon.addFile("c:/tmp/black10x10.png"); 
minButton = new QToolButton; 
minButton->setIcon(minIcon); 

Однако, он появляется на экране сдвигается влево (увеличенное изображения для удобства):

a reasonably misaligned icon

Некоторого Прищурившись в Gimp, мне сказали, что серая область слева имеет увеличенный размер 56 пикселей, а серая область справа - 68. Это несоосность очень заметно даже без масштабирования - именно так я заметил ее в первую очередь. Итак, как я сосредотачиваю этот значок?

P.S. Пробовал использовать QPushButton без текста. Тот же эффект.

+0

Это, вероятно, экономит место для ярлыка. Вы пробовали отрицательный левый край? –

+0

Похоже, вы пытаетесь центрировать изображение 10x10 в прямоугольнике 25x25 (ish). В этом случае всегда будет дрожание в половину пикселя в любом случае. –

+0

@Nicolas Holthaus 'minButton-> setContentsMargins()', похоже, не имеет никакого эффекта, независимо от того, какие параметры я использую. Кроме того, это было бы жесткое кодирование, которое мне пришлось бы тестировать на каждой платформе и версии. – sigil

ответ

0

Это, вероятно, немного поздно, но я наткнулся на тот же вопрос и нашел следующий фрагмент кода в QTs qstylesheet.cpp

case CT_ToolButton: 
     if (rule.hasBox() || !rule.hasNativeBorder() || !rule.baseStyleCanDraw()) 
      sz += QSize(3, 3); // ### broken QToolButton 

Это увеличит вашу иконку даже размера нечетным размера и поэтому не центрированы. Я не уверен, почему есть добавление 3, но комментарий предполагает, что это исправление для чего-то ... К сожалению, это не устраняет проблему, это просто объясняет ее источник. Но это может помочь кому-то найти лучшее решение, чем «сделать все ваши значки нечетными».