Название: QTableWidget Отправлено: demaker от Август 28, 2013, 10:45 Перерисовываю таблицу
и добавляю в нее итемы, которые созданы заранее. Но в консоли выдается сообщение Код: QTableWidget: cannot insert an item that is already owned by another QTableWidget Код
Не могу понять из-из чего??? Подскажите пожалуйста в чем ошибка! Спасибо! Название: Re: QTableWidget Отправлено: mutineer от Август 28, 2013, 10:53 Вроде бы в описании все написано - нельзя занести в таблицу айтем, который уже принадлежит другой таблице
Название: Re: QTableWidget Отправлено: kambala от Август 28, 2013, 11:00 если решение еще не ясно, вноси копию айтема
Название: Re: QTableWidget Отправлено: demaker от Август 28, 2013, 11:05 Вроде бы в описании все написано - нельзя занести в таблицу айтем, который уже принадлежит другой таблице Но у меня одна таблица. Я ее затираю Код и заново вношу итемы. Разве так нельзя? Название: Re: QTableWidget Отправлено: demaker от Август 28, 2013, 11:07 Название: Re: QTableWidget Отправлено: mutineer от Август 28, 2013, 11:13 Вроде бы в описании все написано - нельзя занести в таблицу айтем, который уже принадлежит другой таблице Но у меня одна таблица. Я ее затираю Код и заново вношу итемы. Разве так нельзя? Если ты айтемы удаляешь, то откуда они берутся в stantion->deviceList.at(i)->twi ? Перепеши все на Model/View, проще же будет Название: Re: QTableWidget Отправлено: demaker от Август 28, 2013, 11:15 Если ты айтемы удаляешь, то откуда они берутся в stantion->deviceList.at(i)->twi ? Я же их не удаляю вроде. Я их из таблицы удаляю. Ведь, что чтобы удалить айтем нужно непосредственно сделать Код
или я не прав ??? Название: Re: QTableWidget Отправлено: demaker от Август 28, 2013, 11:18 Перепеши все на Model/View, проще же будет Я читал про Модель - отображение, но так толком ничего и непонял. Если бы мне скинули хороший примерчик или статью хорошую, а то их вроде куча и ничего не понятно. Название: Re: QTableWidget Отправлено: mutineer от Август 28, 2013, 11:21 Могу только Qt документацию и примеры посоветовать, мне этого было достаточно
Название: Re: QTableWidget Отправлено: demaker от Август 28, 2013, 11:25 Да, только у меня задача немного другая.
Есть - база, в нее входят станции, а в каждую станцию входят устройства, а у каждого устройства есть свои функции. В дерево я запихал это, а таблицу как??? Название: Re: QTableWidget Отправлено: mutineer от Август 28, 2013, 11:27 Древовидная модель и и пара табличных view должны с таким справиться.
Либо две модели - одна перечисляет станции, а другая все устройства. На модель с устройствами нацеплен фильтр по станции Название: Re: QTableWidget Отправлено: demaker от Август 28, 2013, 11:36 Древовидная модель и и пара табличных view должны с таким справиться. Либо две модели - одна перечисляет станции, а другая все устройства. На модель с устройствами нацеплен фильтр по станции А есть какой-нибудь пример с двумя вью, где есть фильтр, чтобы посмотреть как это сделать, я с трудом представляю все это И еще я как хотел сделать: Объект, в нем вся инфа общая, итем по дереву и итем по таблице. Ну соответственно отображать. Название: Re: QTableWidget Отправлено: kambala от Август 28, 2013, 11:53 table->setItem(i,0,new QTableWidgetItem(base->stantionList.at(i)->twi));
но возможно старые айтемы из stantionList нужно поудалять (зависит от твоей задачи) Название: Re: QTableWidget Отправлено: demaker от Август 28, 2013, 11:57 table->setItem(i,0,new QTableWidgetItem(base->stantionList.at(i)->twi)); но возможно старые айтемы из stantionList нужно поудалять (зависит от твоей задачи) У меня в stantionList, только указатели на объект класса Stantion Код
а в нем уже табличный итем QTableWidgetItem *twi; Для каждой станции свой QTableWidgetItem и QTreeWidgetItem Название: Re: QTableWidget Отправлено: kambala от Август 28, 2013, 12:04 айтемы проще на лету создавать чем хранить в поле класса
да, и «станция» по-английски пишется без буквы n. *чувствую сейчас последует что-то вроде «сейчас я сосредоточен на задаче, а всякие красивости буду делать после»* Название: Re: QTableWidget Отправлено: mutineer от Август 28, 2013, 12:39 Древовидная модель и и пара табличных view должны с таким справиться. Либо две модели - одна перечисляет станции, а другая все устройства. На модель с устройствами нацеплен фильтр по станции А есть какой-нибудь пример с двумя вью, где есть фильтр, чтобы посмотреть как это сделать, я с трудом представляю все это Не знаю, поищи по стандартным примерам Model/View Название: Re: QTableWidget Отправлено: demaker от Август 28, 2013, 12:45 айтемы проще на лету создавать чем хранить в поле класса да, и «станция» по-английски пишется без буквы n. *чувствую сейчас последует что-то вроде «сейчас я сосредоточен на задаче, а всякие красивости буду делать после»* :), нет я лохонулся :D айтемы проще на лету создавать чем хранить в поле класса Да, возможно вы правы, что надо именно такНазвание: Re: QTableWidget Отправлено: demaker от Август 28, 2013, 12:48 Не знаю, поищи по стандартным примерам Model/View "Будем искать" :)Название: Re: QTableWidget Отправлено: zlex007 от Октябрь 10, 2013, 12:29 Добрый день. Вопрос по QTableWidget. В Qt Designer на форме размещаю таблицу фиксированного размера (количество строк и столбцов), для некоторых ячеек устанавливаю свойства (flags) опять же через Designer и соответствующее окно. Затем в коде начинаю заполнять ячейки QTableWidgetItem. Вопрос: Можно ли в коде получить свойства, которые были установлены через Designer для ячеек, перед тем как записывать в ячейку item?
Спасибо. Название: Re: QTableWidget Отправлено: mutineer от Октябрь 10, 2013, 12:44 Qt::ItemFlags QTableWidgetItem::flags () const
P.S. стоило бы отдельную тему сделать Название: Re: QTableWidget Отправлено: zlex007 от Октябрь 10, 2013, 12:56 Пробовал. До заполнения item в ячейке пустой, соответственно flags не у кого взять. Именно интересуют те свойства, которые были установлены в дизайнере.
Название: Re: QTableWidget Отправлено: mutineer от Октябрь 10, 2013, 13:03 пустой в смысле QTablewidget::item() возвращает 0?
Название: Re: QTableWidget Отправлено: zlex007 от Октябрь 10, 2013, 13:04 Да, указатель на item NULL.
Название: Re: QTableWidget Отправлено: mutineer от Октябрь 10, 2013, 13:06 QTableWidget::model()->flags() что говорит?
Название: Re: QTableWidget Отправлено: zlex007 от Октябрь 10, 2013, 13:11 Прошу прощения, как раз там где менял свойства item не NULL. Спасибо за встряску мозгов. :)
Название: Re: QTableWidget Отправлено: zlex007 от Октябрь 10, 2013, 13:17 Тогда вопрос вдогонку. Необходимо выравнивать item.icon по центру ячейки. Нашел решение сделать свой класс и перегрузить viewOptions.
#include "mytable.h" MyTable::MyTable(QWidget *parent): QTableWidget(parent) { MyTable::viewOptions(); } void MyTable::setAlig() { MyTable::viewOptions(); } QStyleOptionViewItem MyTable::viewOptions() const { QStyleOptionViewItem option = QTableWidget::viewOptions(); option.decorationPosition = QStyleOptionViewItem::Top; option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter; return option; } Вызываю viewOptions, но эффекта не дает. Название: Re: QTableWidget Отправлено: mutineer от Октябрь 10, 2013, 13:18 И не должно - ты вызвал viewOptions, он тебе собрал и вернул option, но ты его выкинул просто
Название: Re: QTableWidget Отправлено: zlex007 от Октябрь 10, 2013, 13:26 Не могу обнаружить метод для их записи.
Название: Re: QTableWidget Отправлено: zlex007 от Октябрь 10, 2013, 14:57 Необходимо перегрузить paint() в itemdelegate()?
Название: Re: QTableWidget Отправлено: Fregloin от Октябрь 12, 2013, 20:21 Сам раньше мучался с таблицами. Пока не изучил Model/View. Теперь не пользуюсь QTableWidget вообще, только viewы.
Потратьте полдня на изучение этого шаблона проектирования и вы увидите насколько легче станет вам в работе с таблицами! |