Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ruzik от Март 09, 2011, 21:37



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


Название: Re: QTableWidget и QTableView
Отправлено: ruzik от Март 10, 2011, 13:00
Все, спасибо, не надо как ни странно, проблема решилась сама собой


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


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


Название: Re: QTableWidget и QTableView
Отправлено: ruzik от Март 10, 2011, 19:01
Да вроде нет
void QTableWidgetItem::setData ( int role, const QVariant & value )


Название: Re: QTableWidget и QTableView
Отправлено: GreatSnake от Март 10, 2011, 19:21
Ну дык читай дальше чем заведает Qt::EditRole:
Цитировать
Qt::EditRole   2   The data in a form suitable for editing in an editor. (QString)
и делай выводы.


Название: Re: QTableWidget и QTableView
Отправлено: ruzik от Март 10, 2011, 20:03
А какая тогда должна быть роль, я перепробовал все подходящие по смыслу, одна и та жа ошибка


Название: Re: QTableWidget и QTableView
Отправлено: GreatSnake от Март 11, 2011, 09:19
Коли ты хочешь отображать в ячейке время, то переведи его в строку используя QTime::toString().
Для простого отображения используй Qt::DisplayRole.

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


Название: Re: QTableWidget и QTableView
Отправлено: ruzik от Март 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 и должен задавать этот элемент и его тип


Название: Re: QTableWidget и QTableView
Отправлено: GreatSnake от Март 11, 2011, 10:45
Цитировать
Но даже если перевести в QString, то ошибку выдает
Ну а чего ошибку-то здесь не показать ???


Название: Re: QTableWidget и QTableView
Отправлено: ruzik от Март 11, 2011, 11:15
Необработанное исключение в "0x0040142f" в "spinboxdelegate.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000".


Название: Re: QTableWidget и QTableView
Отправлено: GreatSnake от Март 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() должна "задавать" элемент только если будешь применять её к модели.


Название: Re: QTableWidget и QTableView
Отправлено: ruzik от Март 11, 2011, 14:15
Спасибо