刻度线未正确绘制的 QSlider
QSlider with ticks not properly drawn
为 QSlider 启用刻度似乎弄乱了滑块本身的 sizeHint。
考虑这个简单的代码:
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSlider ds{Qt::Horizontal};
ds.setRange(0, 100);
ds.setTickPosition(QSlider::TicksAbove);
ds.setTickInterval(20);
ds.show();
return a.exec();
}
这是渲染的方式:
注意下面的滑块是如何裁剪的。
当然,这种行为在复杂的小部件中也是相同的:
调整第一个滑块刻度位置的 window 不会跟随滑块本身。
所以问题是如何在启用刻度的情况下正确呈现 QSlider?
我建议在 top 和 bottom 添加 VerticalSpacer,它们已设置to "expanding" 使滑块夹在中间。因此,当您调整整个小部件的大小时,对于垂直变化,滑块保持 minimumHeight,但对于水平变化,它会扩展(至少这是我期望您想要实现的)。
我发现解决这个问题的实用方法是手动将最小尺寸设置为最小值以避免渲染不正确:
ds.setMinimumHeight(30);
为 QSlider 启用刻度似乎弄乱了滑块本身的 sizeHint。
考虑这个简单的代码:
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSlider ds{Qt::Horizontal};
ds.setRange(0, 100);
ds.setTickPosition(QSlider::TicksAbove);
ds.setTickInterval(20);
ds.show();
return a.exec();
}
这是渲染的方式:
注意下面的滑块是如何裁剪的。
当然,这种行为在复杂的小部件中也是相同的:
调整第一个滑块刻度位置的 window 不会跟随滑块本身。
所以问题是如何在启用刻度的情况下正确呈现 QSlider?
我建议在 top 和 bottom 添加 VerticalSpacer,它们已设置to "expanding" 使滑块夹在中间。因此,当您调整整个小部件的大小时,对于垂直变化,滑块保持 minimumHeight,但对于水平变化,它会扩展(至少这是我期望您想要实现的)。
我发现解决这个问题的实用方法是手动将最小尺寸设置为最小值以避免渲染不正确:
ds.setMinimumHeight(30);