如何更改 QDoubleSpinbox 的文本格式?

Posted

技术标签:

【中文标题】如何更改 QDoubleSpinbox 的文本格式?【英文标题】:How to change text format of QDoubleSpinbox? 【发布时间】:2014-12-06 14:29:06 【问题描述】:

我想以 12°15° 的格式在对话框中输入温度

为此,我使用了 QDoubleSpinBox 小部件,但无法像上面那样设置其文本。

我尝试了以下操作:

degree_sign= u'\NDEGREE SIGN'
temperature = QDOubleSpinBox()
temperature.setSuffix(degree_sign)

得到 12.15°

我认为 valueFromText() 和 textFromValue() 可以提供帮助,但不知道如何使用它们。

如何设置 QDoubleSpinBox 文本(或数值)格式,如 12°15°?

【问题讨论】:

等一下,12°15° 是什么?那是真正的温度格式吗?如果是这样,你为什么不从 QDS 继承? @lpapp 12°15° 表示 12.15 度。我想要这种格式的温度。请提供 QDS 的示例或一些链接。 那么为什么不是 12.15°?这是由一些当地标准定义的吗? @lpapp 是它的本地标准 【参考方案1】:

一种方法是从 QDoubleSpinBox 继承并在此代码中覆盖各自的方法,如下所示:

main.cpp

#include <QDoubleSpinBox>
#include <QApplication>

class MySpinBox : public QDoubleSpinBox

    Q_OBJECT
    public:
        explicit MySpinBox(QWidget *parent = 0) : QDoubleSpinBox(parent) 
    double valueFromText(const QString & text) const
    
        QString valueText = text;
        valueText.chop(1);
        valueText.replace("°", ".");
        return valueText.toFloat();
    

    QString textFromValue(double value) const
    
        QString valueText = QString::number(value);
        valueText.replace(".", "°");
        valueText.append(".");
        return valueText;
    
;

#include "main.moc"

int main(int argc, char **argv)

    QApplication application(argc, argv);
    MySpinBox mySpinBox;
    mySpinBox.show();
    return application.exec();

main.pro

TEMPLATE = app
TARGET = main
QT += widgets
SOURCES += main.cpp

构建并运行

qmake && make && ./main

免责声明:尽管它看起来像一个编译代码,但它确实工作,但显示了这个概念。

【讨论】:

我已将所有代码转换为 python 除了这一行 QString valueText = QString::number(value); 我试图将其转换为 valueText = str(value) 但它给出了错误 我将代码转换为 pyqt 但 qdoublespinbox 显示 0. 是的,这就是我将答案标记为伪代码的原因。概念已经存在,您需要对其进行微调。 是的,我将它修改为 0°00° def valueFromText(self, text): valueText = QString() valueText = text valueText.chop(1) valueText.replace(degree_sign,".") return t.toFloat() def textFromValue(self, value): valueText = QString.number(value, format='f', precision=2) valueText.replace(".", degree_sign) valueText.append(degree_sign) return valueText 点击它只会增加第一个值。我无法修改第二个值。给点提示。还告诉在哪里学习重写 Qt 小部件 @Patrick:请read the documentation。默认步长是 1.0,这就是原因。你需要改变它。

以上是关于如何更改 QDoubleSpinbox 的文本格式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QDoubleSpinBox 中为单步设置多个值

如何禁用 QDoubleSpinBox 中的向上/向下按钮

如何在不丢失格式的情况下更改 Word.Range 文本

如何更改字符串内的部分文本格式(颜色,粗斜体)?

如何在 Vuetify 文本字段中更改 type=date 的时间戳格式

2017-06-17QtGui基础控件:QSpinBox及QDoubleSpinBox