2

使用 Qt 5.2.1

是否可以将 QSlider(无论是水平还是垂直)设置为只读,即用户不能更改滑块的值,而只能将其用作某种指示器?我无法在 Qt 文档或 Qt Designer 中找到任何内容。

应用示例:在 GUI 中显示某种二进制状态(在我的例子中是紧急停止打开或关闭)。

4

4 回答 4

7

AFAIK 此类功能在实现中不可用QSlider

但是,您可以创建自己的类,通过覆盖、、和QSlider实现所需的行为,并且只有在属性设置为时才调用相应的父实现。mousePressEventmouseReleaseEventmouseMoveEventkeyPressEventkeyReleaseEventreadOnlyfalse

幸运的是,这样的实现已经在 中可用kalarm,所以看看它:http ://api.kde.org/4.6-api/kdepim-apidocs/kalarm/lib/html/slider_8cpp_source.html

于 2015-05-27T15:44:04.570 回答
2

也许 aQProgressBar会更合适,因为用户知道它是“只读的”并且“显示了已经完成了多少”。

于 2015-05-27T15:52:06.780 回答
1

遵循 kuba ubar 的第二种方法 -

假设您的滑块的对象名称是 Horizo​​ntalSlider。那么代码应该是

// getting the palette of the slider
QPalette _sliderPalette = ui->horizontalSlider->palette();

// changing the colorGroup of that palette
_sliderPalette.setCurrentColorGroup(QPalette::Active);

// setting the changed palette to the slider 
ui->horizontalSlider->setPalette(_sliderPalette);
于 2015-11-18T13:58:34.710 回答
0

一个简单的解决方案是在滑块上安装一个事件过滤器,它会消耗所有鼠标、焦点和键盘事件。您还需要使滑块具有Qt::NoFocus策略。这样的事件过滤器将是通用的,并且可以与任何控件小部件一起使用。

另一种方法是禁用小部件,并对其进行样式设置,以使禁用和启用的调色板相同。但是,这可能不适用于某些平台样式,并且在您提交之前需要进行实验验证。

于 2015-05-27T16:44:44.760 回答