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) *
Я спрашиваю про отображение числа, а не про форматирование символа разделителя десятичной сотавляющей.
Там всё это есть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
grio
  опции профиля:
сообщение 28.4.2010, 14:45
Сообщение #5


Студент
*

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

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




Репутация:   0  


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

Сорри, не внимательно посмотрел.
Однако все равно работает странно.
Число отображается правильно только по клавише ENTER или если его листать стрелочками ввер-вниз.
Как добиться форматирования уже в процессе ввода числа с клавиатуры?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 15.1.2025, 21:31