QDial更改位置指示文本

时间:2013-07-25 11:50:31

标签: c++ qt qt-designer qdial

我使用QDial控件以秒为单位输入时间值。如何更改在这些拨号中间显示的自动添加的文本?

enter image description here

编辑:他们来自QtCurve风格。

2 个答案:

答案 0 :(得分:1)

如果你的程序中没有明确显示这个整数值的代码(在信号/槽中),那么很可能是你当前的Qt Style。请参阅以下Qt样式示例,以查看此整数的显示通常不是QDial显示的一部分:

http://qt-project.org/doc/qt-4.8/gallery-plastique.html

http://qt-project.org/doc/qt-4.8/gallery-cde.html

http://qt-project.org/doc/qt-4.8/gallery-gtk.html

http://qt-project.org/doc/qt-4.8/gallery-cleanlooks.html

http://qt-project.org/doc/qt-4.8/gallery-windowsvista.html

http://qt-project.org/doc/qt-4.8/gallery-macintosh.html

有关样式的更多信息,请参阅:http://qt-project.org/doc/qt-4.8/qstyle.html

您还可以在程序代码中查找以下代码:

 QApplication::setStyle(...);

您还可以查看以下内容:

  • QT_STYLE_OVERRIDE环境变量
  • -style =参数传递给您的程序

如果您仍未找到样式的设置方式,那么它可能是您平台的默认样式。

以下内容是什么?

QStyle *currentStyle = QApplication::style();
qDebug() << currentStyle;
qDebug() << currentStyle->objectName();
qDebug() << currentStyle->metaObject()->className();

编辑:我看到你认为这种风格是QtCurve。

来源是:http://kde-look.org/content/download.php?content=40492&id=1&tan=23640920

我们可以看到样式负责显示值:

file:style / qtcurve.cpp,line:7980

                // Draw value...
#ifdef DIAL_DOT_ON_RING
                drawItemTextWithRole(painter, outer.adjusted(sliderWidth, sliderWidth, -sliderWidth, -sliderWidth),
                                     Qt::AlignCenter, palette, state&State_Enabled,
                                     QString::number(slider->sliderValue), QPalette::ButtonText);
#else
                int adjust=2*sliderWidth;
                drawItemTextWithRole(painter, outer.adjusted(adjust, adjust, -adjust, -adjust),
                                     Qt::AlignCenter, palette, state&State_Enabled,
                                     QString::number(slider->sliderValue), QPalette::ButtonText);
#endif

从现在开始,您可以:

  • 在禁用错误代码后重新编译样式(注释或使用布尔选项)。
  • 要求维护者提供禁用显示表盘值的选项。

答案 1 :(得分:0)

假设你的意思是秒,以秒为单位?您可以计算出刻度盘相对于其完整旋转的百分比,然后将其应用于最大秒数的百分比。

例如,如果表盘从0变为360且当前位置为90,则其百分比为

90/360 * 100 = 25%。

如果您的最大值(以秒为单位)为60,则为60%的25%。

25/100 * 60 = 15秒。

所以显示屏现在显示15秒。