如何调整QSlider的句柄?
How to adjust a QSlider's handle?
我正在为触摸屏编写一个应用程序,默认手柄太小而无法可靠地抓取,所以我想把它变大。根据官方文档、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
您只需使用一个简单的样式表即可更改手柄的大小。示例:
使用以下样式表完成:
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;
}
好的,使用 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
,其中一个使用样式 sheet.
进行了修改
如您所见,我过去也改变了凹槽,它按预期工作。但是有一些奇怪的问题可能根本就是一个错误。尝试注释掉凹槽样式 sheet 的一些属性,例如 border、background 和 margin.如果没有有效的属性,句柄的 width 属性 被丢弃。由于我在文档中找不到任何约束,我想知道为什么会这样。
另请注意在手柄周围绘制 边框 的问题。似乎需要一些更精细的调整。 ;)
总结一下为您提供的快速解决方案应该为凹槽添加一些默认属性。
我正在为触摸屏编写一个应用程序,默认手柄太小而无法可靠地抓取,所以我想把它变大。根据官方文档、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
您只需使用一个简单的样式表即可更改手柄的大小。示例:
使用以下样式表完成:
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;
}
好的,使用 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
,其中一个使用样式 sheet.
如您所见,我过去也改变了凹槽,它按预期工作。但是有一些奇怪的问题可能根本就是一个错误。尝试注释掉凹槽样式 sheet 的一些属性,例如 border、background 和 margin.如果没有有效的属性,句柄的 width 属性 被丢弃。由于我在文档中找不到任何约束,我想知道为什么会这样。
另请注意在手柄周围绘制 边框 的问题。似乎需要一些更精细的调整。 ;)
总结一下为您提供的快速解决方案应该为凹槽添加一些默认属性。