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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget и QTableView  (Прочитано 8129 раз)
ruzik
Гость
« : Март 09, 2011, 21:37 »

Здравствуйте, я сделал делегат(апгрейдил пример под себя), все работает в примере, все отлично, но как только я пытаюсь применить это к моему основному проекту, то все работает кроме одного, у меня делегат- QTimeEdit, и теперь какое-бы значение не было бы в таблице, как только я хочу редактировать оно обнуляется, но если делать это в примере то все нормально, тк в примере QTableView а в программе QTableWidget, возможно еще причина в том что в примере я сам устанавливаю маску, а в основной программе нет, но я думаю что это не столь важно
Код:
	ted = new TimeEditDelegate;//
tableWidget->setItemDelegateForColumn(0,ted);
Это я устанавливаю делегаты в колонку
В аттаче пример
Записан
ruzik
Гость
« Ответ #1 : Март 10, 2011, 13:00 »

Все, спасибо, не надо как ни странно, проблема решилась сама собой
Записан
ruzik
Гость
« Ответ #2 : Март 10, 2011, 18:31 »

Нет проблема не совсем исчезла, надо присвоить каждому itemу нужный тип и значение, я пытаюсь это сделать
Код:
QTime t;
t.setHMS(1,1,1);
tableView.item(0,0)->setData(Qt::EditRole,t);
Но мне выдает ошибку - нельзя прочесть и тп, хотя вроде все правильно, элемент item(0,0) существует
Заранее спасибо!
Записан
Karl-Philipp
Гость
« Ответ #3 : Март 10, 2011, 18:48 »

Нет проблема не совсем исчезла, надо присвоить каждому itemу нужный тип и значение, я пытаюсь это сделать
Код:
QTime t;
t.setHMS(1,1,1);
tableView.item(0,0)->setData(Qt::EditRole,t);
Но мне выдает ошибку - нельзя прочесть и тп, хотя вроде все правильно, элемент item(0,0) существует
Заранее спасибо!
В методе setData() порядок аргументов, случаем, не перепутан?
Записан
ruzik
Гость
« Ответ #4 : Март 10, 2011, 19:01 »

Да вроде нет
void QTableWidgetItem::setData ( int role, const QVariant & value )
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Март 10, 2011, 19:21 »

Ну дык читай дальше чем заведает Qt::EditRole:
Цитировать
Qt::EditRole   2   The data in a form suitable for editing in an editor. (QString)
и делай выводы.
Записан

Qt 5.11/4.8.7 (X11/Win)
ruzik
Гость
« Ответ #6 : Март 10, 2011, 20:03 »

А какая тогда должна быть роль, я перепробовал все подходящие по смыслу, одна и та жа ошибка
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Март 11, 2011, 09:19 »

Коли ты хочешь отображать в ячейке время, то переведи его в строку используя QTime::toString().
Для простого отображения используй Qt::DisplayRole.

Ну и читай ассистент, читай и по-больше...
Записан

Qt 5.11/4.8.7 (X11/Win)
ruzik
Гость
« Ответ #8 : Март 11, 2011, 10:29 »

Переводить в QString я думаю бессмысленно, так как
void QTableWidgetItem::setData ( int role, const QVariant & value )
                                                    |То есть QTime подходит тоже|
Но даже если перевести в QString, то ошибку выдает
tableView.item(0,0)->setData(Qt::DisplayRole,t.toString());
Я понимаю что ошибка из-за того что в item есть а элемента в нем как бы нет, то есть он не задан, но ведь по смыслу setData и должен задавать этот элемент и его тип
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Март 11, 2011, 10:45 »

Цитировать
Но даже если перевести в QString, то ошибку выдает
Ну а чего ошибку-то здесь не показать Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
ruzik
Гость
« Ответ #10 : Март 11, 2011, 11:15 »

Необработанное исключение в "0x0040142f" в "spinboxdelegate.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000".
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Март 11, 2011, 11:23 »

Цитировать
Необработанное исключение в "0x0040142f" в "spinboxdelegate.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000".
Вот ты странный человек, сколько раз тебе здесь уже говорили - чем больше дашь инфы, тем быстрее тебе помогут.
Почему сразу нельзя было показать эту ошибку Непонимающий

Цитировать
tableView.item(0,0)->setData(Qt::DisplayRole,t.toString());
Я понимаю что ошибка из-за того что в item есть а элемента в нем как бы нет, то есть он не задан, но ведь по смыслу setData и должен задавать этот элемент и его тип
Вот как раз у тебя item-a то и нет и ты обращаешься по нулевому указателю.
Сначала создай QTableWidgetItem. Потом помести его в виджет через QTableWidget::setItem() и уже потом, если понадобится используй QTableWidgetItem::setData().
А вот setData() должна "задавать" элемент только если будешь применять её к модели.
« Последнее редактирование: Март 11, 2011, 11:27 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
ruzik
Гость
« Ответ #12 : Март 11, 2011, 14:15 »

Спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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