5

いくつかのタスクに関して、私は次のことをしなければなりません。0 から 1000 までの正の値を持つ QDoubleSpinBox があるとします。ユーザーがスピンボックスの値を下げようとするたびに、値が 0 のときに下ボタンをクリックすると、スピンボックスの値は文字列「未設定」でなければなりません。スピンボックスの値をクリアしてからsetPrefixを設定するために、これを実行しようとしました。しかし、うまくいきませんでした。他の解決策はありますか?

4

3 に答える 3

10

試すことができspecialValueTextます。

これは例です:

#include <QApplication>
#include <QDoubleSpinBox>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QDoubleSpinBox doubleSpinBox;
    doubleSpinBox.setRange(0.f, 1000.f);
    doubleSpinBox.setValue(1.f);
    doubleSpinBox.setSpecialValueText("unset");

    doubleSpinBox.show();
    return a.exec();
}

値が 0 の場合、スピンボックスの値は文字列 "unset" でなければなりません。

于 2014-11-14T08:40:28.170 に答える
6

あなたが望むものを達成するための2つの解決策があります。

他の答えの pezy のように、スピンボックスの現在の value() == minimum() のときにテキストが表示されるsetSpecialValueTextを使用する

またはもう少し強力: QSpinBox をサブクラス化し、次の関数をオーバーライドします。

int valueFromText(const QString &text) const;
QString textFromValue(int value) const;
QValidator::State validate(QString & input, int & pos) const;

ここを見て、似たようなQSpinBox enter NaN as valid value を試してみてください。

于 2014-11-14T08:25:12.490 に答える
-1

QSpinBox をサブクラス化し、動作を定義します。
この例を見てください

于 2014-11-14T08:26:57.747 に答える