Я пишу приложение для сенсорного экрана, и дескриптор по умолчанию слишком мал для надежного захвата, поэтому я хочу сделать его больше. Согласно официальной документации, нескольким ответам на SE и нескольким другим форумам, это должно работать в конструкторе QWidget:
sliderGrandMaster = new QSlider(Qt::Vertical, panelRight);
sliderGrandMaster->setGeometry( appdata->buttonBorder , //Left
buttonTopRight + appdata->buttonBorder , //Top
halfwidth - (2 * appdata->buttonBorder), //Width
buttonRemainingHeight - (2 * appdata->buttonBorder)); //Height
sliderGrandMaster->setRange(0, RANGE_MAX);
sliderGrandMaster->setTickInterval(RANGE_MAX / 10);
sliderGrandMaster->setTickPosition(QSlider::TicksBothSides);
QString temp = QString("handle:vertical { background: green; height: %1px; margin: 0 -%2px; }")
.arg(buttonRemainingHeight / 5)
.arg(halfwidth / 3);
sliderGrandMaster->setStyleSheet(temp);
Но, похоже, не имеет никакого эффекта. Дескриптор одного размера не зависит от того, какие значения я поместил в таблицу стилей, и он даже не зеленый.
С моими ценностями во время выполнения, temp
в конечном итоге handle:vertical { background: green; height: 66px; margin: 0 -32px; }
, Размер слайдера 94px wide by 331px tall
,
Я что-то пропустил?
Это:
QString temp = QString("QSlider::handle { background: green; height: %1px; width: %1px; margin: 0 -%2px; }")
.arg(buttonRemainingHeight / 5)
.arg(halfwidth / 3);
sliderGrandMaster->setStyleSheet(temp);
по крайней мере, получил зеленый. Но размер все равно неправильный. Qt версия 5.4.2
Хорошо, используя Qt 5.6.1, я получил некоторый прогресс в этом. Следующий код
QSlider* slider = new QSlider(this);
slider->setOrientation(Qt::Horizontal);
slider->setStyleSheet("QSlider::groove:horizontal { ""border: 1px solid #999999; ""height: 20px; ""background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4); ""margin: 2px 0; ""} ""QSlider::handle:horizontal { ""background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f); ""border: 1px solid #5c5c5c; ""width: 30px; ""margin: -2px 0px; ""} ");
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(slider);
layout->addWidget(new QSlider(Qt::Horizontal, this));
setLayout(layout);
может быть помещен в пустую QWidget
работать. Это просто добавляет два QSliders
, один из которых изменен с использованием таблицы стилей.
Как видите, я тоже менял паз, и он работает как предполагалось. Но есть странные проблемы, которые могут быть ошибкой. Попробуйте закомментировать некоторые свойства таблицы стилей Groove, например: граница, фон а также поле. Если нет эффективных свойств, ширина свойство дескриптора сброшено. Поскольку я не могу найти никаких ограничений в документации, мне интересно, почему это происходит.
Также обратите внимание на проблемы рисования граница вокруг ручки. Кажется, нужна более тонкая настройка. 😉
Подводя итог, быстрое решение для вас должно быть добавлено несколько свойств по умолчанию для канавки.
Вы можете изменить размер ручки просто с помощью простой таблицы стилей. Пример :
Это делается с помощью следующей таблицы стилей:
QSlider::groove:horizontal
{
border:none;
margin-top: 10px;
margin-bottom: 10px;
height: 10px;
}
QSlider::sub-page
{
background: rgb(164, 192, 2);
}
QSlider::add-page
{
background: rgb(70, 70, 70);
}
QSlider::handle
{
background: white;
border: 3px solid black;
width: 60px; // **Change the width here**
margin: -30px 0;
}