crossplatform.ru

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


  Ответ в QDoubleSpinBox
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 28.4.2010, 16:03
 
Цитата(grio @ 28.4.2010, 18:45) *
Как добиться форматирования уже в процессе ввода числа с клавиатуры?
это надо над QLineEdit колдовать, как наколдуешь, так добавишь код в своего наследника QSpinBox.
grio Дата 28.4.2010, 14:45
 
Цитата(arial @ 28.4.2010, 9:37) *
Цитата(grio @ 27.4.2010, 11:37) *
Я спрашиваю про отображение числа, а не про форматирование символа разделителя десятичной сотавляющей.
Там всё это есть.

Сорри, не внимательно посмотрел.
Однако все равно работает странно.
Число отображается правильно только по клавише ENTER или если его листать стрелочками ввер-вниз.
Как добиться форматирования уже в процессе ввода числа с клавиатуры?
arial Дата 28.4.2010, 8:37
 
Цитата(grio @ 27.4.2010, 11:37) *
Я спрашиваю про отображение числа, а не про форматирование символа разделителя десятичной сотавляющей.
Там всё это есть.
BRE Дата 27.4.2010, 12:57
  Наверное лучше внимательно посмотреть на тот код, который привел arial и переделать его под себя.
grio Дата 27.4.2010, 12:54
 
Цитата(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.
Litkevich Yuriy Дата 27.4.2010, 12:02
  grio, а как выглядеть должно?
Так:
123 456,67890
??
grio Дата 27.4.2010, 11:37
 
Цитата(arial @ 27.4.2010, 12:04) *
Так подойдёт:[skipped]


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

arial Дата 27.4.2010, 11:04
  Так подойдёт:
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, 8:14
  Парни, существуют ли стандартные средства представления числа СпинБоксом в текущей локали?
Хочется реализовать такой вариант отображения в QDoubleSpinBox: QLocale().toString(i, 'f', 2);
Или проще самостоятельно обрабатывать ввод QLineEdit и забить на QDoubleSpinBox?
Задача довольно стандартная - при вводе, визуально разделить число пробелами по 3 знака для удобства восприятия.

br,
grio.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 16:03