crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QDoubleSpinBox, Отображение числа в формате локали
grio
  опции профиля:
сообщение 27.4.2010, 8:14
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


Парни, существуют ли стандартные средства представления числа СпинБоксом в текущей локали?
Хочется реализовать такой вариант отображения в QDoubleSpinBox: QLocale().toString(i, 'f', 2);
Или проще самостоятельно обрабатывать ввод QLineEdit и забить на QDoubleSpinBox?
Задача довольно стандартная - при вводе, визуально разделить число пробелами по 3 знака для удобства восприятия.

br,
grio.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
arial
  опции профиля:
сообщение 27.4.2010, 11:04
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 39
Регистрация: 27.9.2009
Пользователь №: 1121

Спасибо сказали: 9 раз(а)




Репутация:   0  


Так подойдёт:
class DoubleSpinBox : public QDoubleSpinBox
{
Q_OBJECT
public:
    explicit DoubleSpinBox(QWidget *parent = 0);
    virtual QString textFromValue(double value) const;
    virtual double valueFromText(const QString &text) const;

protected:
    void keyPressEvent(QKeyEvent *e);
};

DoubleSpinBox::DoubleSpinBox(QWidget *parent) :
    QDoubleSpinBox(parent)
{
}

QString DoubleSpinBox::textFromValue(double value) const
{
    QString text = QString("%L1").arg(value, 0, 'f', decimals());
    return text.replace(QLatin1Char('.'), QLocale().decimalPoint());
}

double DoubleSpinBox::valueFromText(const QString &text) const
{
    return QString(text).replace(QLocale().decimalPoint(), QLatin1Char('.')).toDouble();
}

void DoubleSpinBox::keyPressEvent(QKeyEvent *e)
{
    switch (e->key()) {
    case Qt::Key_Comma:
    case Qt::Key_Period: {
        QKeyEvent *myKeyEvent = new QKeyEvent(QEvent::KeyPress, Qt::Key_Comma,
                                              e->modifiers(), QLocale().decimalPoint());
        QDoubleSpinBox::keyPressEvent(myKeyEvent);
        break;
    }
    default:
        QDoubleSpinBox::keyPressEvent(e);
    }
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
grio
  опции профиля:
сообщение 27.4.2010, 11:37
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 87
Регистрация: 11.11.2009
Пользователь №: 1221

Спасибо сказали: 6 раз(а)




Репутация:   0  


Цитата(arial @ 27.4.2010, 12:04) *
Так подойдёт:[skipped]


Нет, не то. Я спрашиваю про отображение числа, а не про форматирование символа разделителя десятичной сотавляющей.
Хотя это тоже, безусловно, полезно, но не то, о чем я спрашивал.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
arial
  опции профиля:
сообщение 28.4.2010, 8:37
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 39
Регистрация: 27.9.2009
Пользователь №: 1121

Спасибо сказали: 9 раз(а)




Репутация:   0  


Цитата(grio @ 27.4.2010, 11:37) *
Я спрашиваю про отображение числа, а не про форматирование символа разделителя десятичной сотавляющей.
Там всё это есть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.4.2024, 13:00