Почему стилизация виджетов QT заставляет их превышать значения размера?

Это то, с чем я боролся с тех пор, как начал использовать таблицы стилей в QT.

У меня есть этот стиль:

QPushButton#btnNewCamera
{
    border-radius: 5px;
    min-width: 20px;
    min-height: 20px;
    background-position: center;
    background-repeat: no-repeat;
}

Это код, который я должен был установить, чтобы заставить его работать.

createNewCameraBtn = new QPushButton();
createNewCameraBtn->setObjectName( tr("btnNewCamera") );      
createNewCameraBtn->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
createNewCameraBtn->setFixedWidth(20);
  

Имеет ли это смысл?. Говорить размер дважды? Эти кнопки всегда одного размера. Если я установлю фиксированный размер меньше 20, он все равно будет работать (потому что он сохраняет минимальный размер из таблицы стилей... так что я предполагаю, что размеры таблицы стилей являются приоритетными...)

Но почему бы просто не указать размер внутри таблицы стилей. Зачем добавлять эти другие строки?

Может ли кто-нибудь объяснить мне, что происходит с этим? Зачем нужна минимальная ширина в таблице стилей, чтобы она работала? Почему бы просто не дать ему информацию о фоне и заставить его работать как старые кнопки?


person Darkgaze    schedule 10.01.2013    source источник
comment
Я хотел бы знать, что является обязательным, а что нет!   -  person Darkgaze    schedule 10.01.2013


Ответы (1)


таблицы стилей изменят свойства вашего виджета, поэтому изменять одно и то же в коде и таблице стилей не нужно. Если вы хотите сделать фиксированный размер виджета с помощью CSS, вам нужно установить как минимальный, так и максимальный размер. В противном случае размер виджета может измениться. Старайтесь хранить все элементы стилей в одном месте, чтобы все было понятно, так как иногда свойства будут смешиваться со свойствами кода и CSS.

Помните, что свойства будут изменяться в порядке их применения. Поэтому, если вы сначала примените CSS к приложению, а затем измените свойства в коде, свойство сохранит значение из кода. Если вы измените свойство в коде, а затем примените CSS, значение CSS будет сохранено.

person Kamil Klimek    schedule 10.01.2013
comment
Спасибо Камил. Как узнать, что было применено раньше? Я загружаю css в начале приложения. Более того, я пытался изменить размер ТОЛЬКО через таблицу стилей, и это не сработало. Вот почему мне тоже пришлось поместить это в код! - person Darkgaze; 11.01.2013
comment
У меня никогда не было проблем с размерами при использовании минимальной/максимальной ширины/высоты для управления размером - person Kamil Klimek; 11.01.2013
comment
Вам просто нужно не забыть отключить ограничения размера / фиксированные размеры минимальной / максимальной ширины из файлов пользовательского интерфейса. Насколько я помню, если CSS применяется к QApplication, он будет использоваться при создании виджета, поэтому все остальные вызовы будут различаться влиянием CSS. - person Kamil Klimek; 11.01.2013
comment
Ох. Ok. Благодарю. Я попытаюсь. Я использую обе политики размера, но я использую их с QT... я устанавливаю политики Expanding и Fixed, но затем я устанавливаю размер... это какой-то беспорядок.. - person Darkgaze; 14.01.2013
comment
В случае с окном размер вообще не работает. Вы должны установить его в ОБОИХ местах. Я проверил, и некоторые виджеты не работают без обоих методов. - person Darkgaze; 16.01.2013