QScrollBar имеет разницу между компиляцией для рабочего стола и среды Embedded Linux

Недавно я пришел к SO в этот вопрос, спрашивая, как Могу ли я получить в свои руки QScrollBar QComboBox, чтобы изменить его толщину. Прочитав ответы, я попробовал решение Marco A. для своего приложения Qt Embedded, но оно не сработало. Затем для проверки я изменил среду компиляции на рабочий стол, и исправление сработало!

По сути, моя проблема заключается в том, что когда я пытаюсь изменить ширину QScrollBar QComboBox в Qt для Embedded Linux (ARM), ничего не происходит, но если я скомпилирую точно такой же код для Qt для рабочего стола, он работает. Ниже приведен код, который я использую для тестов:

QAbstractItemView* poView = ui->comboBox->view();
QScrollBar* poBar = poView->verticalScrollBar();
poBar->setStyleSheet("width: 50px;");

и есть еще один код, который делает то же самое, но показывает ту же проблему:

ui->comboBox->setStyleSheet("QScrollBar:vertical { width: 50px; }");

Когда comboBox объявляется в форме пользовательского интерфейса в Qt Designer (внутри Qt Creator).

Версии Qt одинаковы для рабочего стола и Qt для встроенного Linux (4.8.5). Еще одна вещь, которую я нашел странной (но не должна иметь к этому никакого отношения), заключается в том, что повторная компиляция того же кода для рабочего стола показывает QComboBox со стилем Windows XP, в то время как для встраиваемого используется стиль Plastique (я замечаю, что это совершенно ясно из-за Plastique показаны три вместо двух кнопок для прокрутки полосы прокрутки).

Так что же может происходить? Как я могу решить эту проблему?


person Momergil    schedule 30.09.2014    source источник


Ответы (2)


Я заметил те же симптомы. Насколько я понимаю, в Qt большая часть рисования была делегирована стилям, а стиль Plastique, кажется, имеет ошибку в том, что он, кажется, не рисует вертикальную полосу прокрутки в правильных координатах, если он не имеет размер по умолчанию. Итак, если вы сделаете это:

QScrollBar:vertical
{
    min-width: 35px;
    width: 35px;
}

у вас появляются описанные вами симптомы. Но, AFAICS, с обработкой полей тоже что-то не так! Если вы играете с полями, например. как это:

QScrollBar:vertical
{
    min-width: 35px;
    width: 35px;
    margin-right: 35px;
}

вы должны быть в состоянии обойти ошибку.

По крайней мере, у меня сработало.

person path    schedule 20.01.2015
comment
Спасибо за тип. На самом деле, решение работает очень хорошо, когда дело доходит до управления шириной полосы прокрутки. Проблема теперь в том, что элемент управления постоянно глючит: если я нажму на любую часть полосы прокрутки, кроме стрелки вниз, полоса поднимется! у вас есть идеи, как это исправить? - person Momergil; 25.03.2015

poBar->setMinimumWidth(50);
poBar->setMaximumWidth(50);

Я пробовал это с PyQt5, QT5 в синтаксисе Python3, он настраивает ширину полосы прокрутки в Linux (Ubuntu 14.04), а также в Windows7.

person a_manthey_67    schedule 06.10.2014
comment
спасибо за ответ, но я уже тестировал это решение раньше, и как для Ubuntu, так и для Embedded Linux оно не работает: хотя оно изменяет ширину полосы, оно не меняет ширину пространства, в котором расположена полоса. , поэтому в конце QScrollBar с измененным размером выглядит обрезанным и с той же полезной площадью, что и раньше. Извините, что не показал распечатку, но, как мне кажется, убунту не позволяет мне сделать распечатку с видимым списком QComboBox. - person Momergil; 06.10.2014
comment
@Momergil: ты пробовал pobar-›setGeometry()? - person a_manthey_67; 06.10.2014