Russian Qt Forum
Октябрь 02, 2024, 01:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QTableView с QDoubleSpinBox'ами. Как изменить их свойства?  (Прочитано 4964 раз)
kpx13
Гость
« : Март 31, 2011, 01:12 »

Здравствуйте!
У меня есть табличка QTableView из double'ов, в каждой ячейке QDoubleSpinBox по сути.
Только вот проблема в том, что свойства спинбоксов дефолтные, т.е. шаг = 1.0 и точность - 2 знака.
Мне нужно изменять эти настройки в зависимости от содержимого.
К примеру, если в ячейке число 0.005, и мы хотим отредактировать это значение, то надо для этой ячейки сделать setDecimals (4).
Или хотя бы расскажите как сделать чтобы точность для всей таблицы изменить (2 знака - не серьёзно).
« Последнее редактирование: Март 31, 2011, 17:23 от kpx13 » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Март 31, 2011, 08:25 »

Заводишь свой делегат, в котором перегружаешь createEditor(), в котором создаешь QDoubleSpinBox с нужными тебе свойствами.
« Последнее редактирование: Март 31, 2011, 08:30 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
kpx13
Гость
« Ответ #2 : Март 31, 2011, 17:24 »

Я сделала!
Кому интересно, вот код:

Код:
class props_table_delegate : public QItemDelegate
{
public:
  props_table_delegate (QObject *view) : QItemDelegate (view)
    {
    }

  QWidget * createEditor (QWidget *parent, const QStyleOptionViewItem &/*option*/, const QModelIndex &index) const
    {
      QDoubleSpinBox *sb = 0;
      QString str;
      double value;
      bool ok;

      str = index.data (Qt::DisplayRole).toString ();
      value = index.data (Qt::DisplayRole).toDouble (&ok);

      if (!ok)
        return parent;
      sb = new QDoubleSpinBox (parent);
      sb->setDecimals (precision_of_double_from_string (str));
      sb->setSingleStep (1.0 / 20.0);
      return (QWidget *) sb;
    }
};
Записан
twp
Гость
« Ответ #3 : Март 31, 2011, 18:08 »

имхо лучше дать создать редактор стандатному итему, а потом уже установить нужные свойства, например так:
Код:
  QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
  {
         QWidget *w = QItemDelegate::createEditor(parent, option, index);

         if (QDoubleSpinBox *sb = qobject_cast<QDoubleSpinBox *>(w)) {
             sb->setDecimals (...);
             sb->setSingleStep (...);
         }
         return w;
  }
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 22.