使用Qt 5.2.1
是否可以将QSlider(如果它的水平或垂直无关)设置为只读,即用户无法更改滑块的值但仅将其用作某些指示器分类?我无法在Qt文档或Qt Designer中找到任何内容。
应用示例:在GUI中显示某种二进制状态(在我的情况下是紧急停止开启或关闭)。
答案 0 :(得分:6)
AFAIK此功能在QSlider
实施中不可用。
但是,您可以创建自己的类QSlider
,并通过覆盖mousePressEvent
,mouseReleaseEvent
,mouseMoveEvent
,keyPressEvent
和{来实现所需的行为{1}},如果keyReleaseEvent
属性设置为readOnly
,则仅调用相应的父实现。
幸运的是,false
已经提供了这样的实现,因此请查看它:http://api.kde.org/4.6-api/kdepim-apidocs/kalarm/lib/html/slider_8cpp_source.html
答案 1 :(得分:2)
也许QProgressBar
会更合适,因为用户知道它是“只读”,“显示已完成了多少”。
答案 2 :(得分:0)
一个简单的解决方案是在滑块上安装一个消耗所有鼠标,焦点和键盘事件的事件过滤器。您还需要使滑块具有Qt::NoFocus
策略。这样的事件过滤器是通用的,可以与任何控件小部件一起使用。
另一种方法是禁用窗口小部件,并对其进行样式设置,以便禁用和启用的调色板相同。但是,这可能不适用于某些平台样式,并且在您提交之前需要进行实验验证。
答案 3 :(得分:0)
遵循kuba ubar的第二种方法 -
假设滑块的对象名称为horizontalSlider。那么代码应该是
// 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);