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