@Mercury13
Программист на «си с крестами» и не только

QModelDelegate: почему в таблице и делегате разная точность и локаль?

Вот такой код.
void CoeffDelegate::setEditorData(
        QWidget* editor,
        const QModelIndex & index) const
{
    QLineEdit* currEdit = dynamic_cast<QLineEdit*>(editor);
    QString text = index.model()->data(index).toString();
    currEdit->setText(text);
}


model()->data, как известно, выдаёт QVariant; я его делаю из float. Проблемы две.

1. В таблице около шести значащих цифр, в редакторе восемь-девять.
2. В таблице системная локаль, в редакторе стандартная (с точкой).

Что делать?
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
@Mercury13 Автор вопроса
Программист на «си с крестами» и не только
Переопределяем QStyledItemDelegate. У него есть функция displayText, превращающая значение в текст. Можно её переопределить (то, что изначально, мне не слишком нравится, несколько миллионов уже 5,67e+6), но не в этом дело.

QWidget* LineEditDelegate::createEditor(
        QWidget* parent,
        const QStyleOptionViewItem& option,
        const QModelIndex&) const
{
    QLineEdit* edit = new QLineEdit(parent);
    edit->setLocale(option.locale);   // важно! — локаль потом потребуется
    return edit;
}

void LineEditDelegate::setEditorData(
        QWidget* editor,
        const QModelIndex & index) const
{
    QLineEdit* currEdit = dynamic_cast(editor);
    QVariant var = index.model()->data(index);
    QString text = displayText(var, editor->locale());
    currEdit->setText(text);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы