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]


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

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.4.2010, 12:02
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


grio, а как выглядеть должно?
Так:
123 456,67890
??
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
grio
  опции профиля:
сообщение 27.4.2010, 12:54
Сообщение #5


Студент
*

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 27.4.2010, 13:02) *
grio, а как выглядеть должно?
Так:
123 456,67890
??

Да, только после запятой 2 знака.
Вот пример:
double i = 123456789.123;
qDebug()<<QLocale().toString(i, 'f', 2);

на выходе будет 123 456 789,12

теперь мне надо такое представление числа реализовать в QDoubleSpinBox.
или придется писать свой обработчик для QLineEdit.

Сообщение отредактировал grio - 27.4.2010, 12:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 27.4.2010, 12:57
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Наверное лучше внимательно посмотреть на тот код, который привел arial и переделать его под себя.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
arial
  опции профиля:
сообщение 28.4.2010, 8:37
Сообщение #7


Студент
*

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

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




Репутация:   0  


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


Студент
*

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

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




Репутация:   0  


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

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


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(grio @ 28.4.2010, 18:45) *
Как добиться форматирования уже в процессе ввода числа с клавиатуры?
это надо над QLineEdit колдовать, как наколдуешь, так добавишь код в своего наследника QSpinBox.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 14.11.2019, 14:43