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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QTableWidget  (Прочитано 11290 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Август 28, 2013, 10:45 »

Перерисовываю таблицу
и добавляю в нее итемы, которые созданы заранее.

Но в консоли выдается сообщение
Код:
QTableWidget: cannot insert an item that is already owned by another QTableWidget
, а потом прога и вовсе вылетает с кодом ошибки 255

Код
C++ (Qt)
 
void tableWidget::sl_base_format(Base *base)
{
   table->clear();
 
   if(base->stantionList.length() != 0)
   {
       table->setRowCount(base->stantionList.length());
       table->setColumnCount(3);
 
       for(int i = 0; i<base->stantionList.length(); i++)
       {
           table->setItem(i,0,base->stantionList.at(i)->twi);
       }
   }
}
 
void tableWidget::sl_stantion_format(Stantion* stantion)
{
   table->clear();
 
   if(stantion->deviceList.length() != 0)
   {
       table->setRowCount(stantion->deviceList.length());
       table->setColumnCount(3);
 
       for(int i = 0; i<stantion->deviceList.length(); i++)
       {
           table->setItem(i,0,stantion->deviceList.at(i)->twi); //!!! в дебаге вылетает вот на этой строчке
       }
   }
}
 

Не могу понять из-из чего???
Подскажите пожалуйста в чем ошибка!
Спасибо!
« Последнее редактирование: Август 28, 2013, 10:48 от demaker » Записан
mutineer
Гость
« Ответ #1 : Август 28, 2013, 10:53 »

Вроде бы в описании все написано - нельзя занести в таблицу айтем, который уже принадлежит другой таблице
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Август 28, 2013, 11:00 »

если решение еще не ясно, вноси копию айтема
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #3 : Август 28, 2013, 11:05 »

Вроде бы в описании все написано - нельзя занести в таблицу айтем, который уже принадлежит другой таблице

Но у меня одна таблица.

Я ее затираю
Код
C++ (Qt)
table->clear();
 
и заново вношу итемы.
Разве так нельзя?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #4 : Август 28, 2013, 11:07 »

если решение еще не ясно, вноси копию айтема

это как?
Записан
mutineer
Гость
« Ответ #5 : Август 28, 2013, 11:13 »

Вроде бы в описании все написано - нельзя занести в таблицу айтем, который уже принадлежит другой таблице

Но у меня одна таблица.

Я ее затираю
Код
C++ (Qt)
table->clear();
 
и заново вношу итемы.
Разве так нельзя?

Если ты айтемы удаляешь, то откуда они берутся в stantion->deviceList.at(i)->twi ?

Перепеши все на Model/View, проще же будет
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #6 : Август 28, 2013, 11:15 »

Если ты айтемы удаляешь, то откуда они берутся в stantion->deviceList.at(i)->twi ?

Я же их не удаляю вроде.
Я их из таблицы удаляю.

Ведь, что чтобы удалить айтем нужно непосредственно сделать
Код
C++ (Qt)
delete item;
 

или я не прав Непонимающий
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #7 : Август 28, 2013, 11:18 »

Перепеши все на Model/View, проще же будет

Я читал про
Модель - отображение, но так толком ничего и непонял.
Если бы мне скинули хороший примерчик или статью хорошую, а то их вроде куча и ничего не понятно.
Записан
mutineer
Гость
« Ответ #8 : Август 28, 2013, 11:21 »

Могу только Qt документацию и примеры посоветовать, мне этого было достаточно
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #9 : Август 28, 2013, 11:25 »

Да, только у меня задача немного другая.

Есть - база, в нее входят станции, а в каждую станцию входят устройства, а у каждого устройства есть свои функции.
В дерево я запихал это, а таблицу как???
Записан
mutineer
Гость
« Ответ #10 : Август 28, 2013, 11:27 »

Древовидная модель и и пара табличных view должны с таким справиться.

Либо две модели - одна перечисляет станции, а другая все устройства. На модель с устройствами нацеплен фильтр по станции
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #11 : Август 28, 2013, 11:36 »

Древовидная модель и и пара табличных view должны с таким справиться.

Либо две модели - одна перечисляет станции, а другая все устройства. На модель с устройствами нацеплен фильтр по станции

А есть какой-нибудь пример с двумя вью, где есть фильтр, чтобы посмотреть как это сделать, я с трудом представляю все это

И еще
я как хотел сделать:
Объект, в нем вся инфа общая, итем по дереву и итем по таблице.
Ну соответственно отображать.
« Последнее редактирование: Август 28, 2013, 11:40 от demaker » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Август 28, 2013, 11:53 »

если решение еще не ясно, вноси копию айтема

это как?
table->setItem(i,0,new QTableWidgetItem(base->stantionList.at(i)->twi));

но возможно старые айтемы из stantionList нужно поудалять (зависит от твоей задачи)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #13 : Август 28, 2013, 11:57 »

table->setItem(i,0,new QTableWidgetItem(base->stantionList.at(i)->twi));
но возможно старые айтемы из stantionList нужно поудалять (зависит от твоей задачи)

У меня в stantionList, только указатели на объект класса Stantion

Код
C++ (Qt)
 
class Base;
class Device;
 
class Stantion: public QObject
{
   Q_OBJECT
 
public:
   explicit Stantion(Base*);
   virtual ~Stantion();
 
public Q_SLOTS:
   void sl_addDevice();
   void sl_removeDevice(Device*);
 
public:
   Base *base;
   StantionItem *stantionitem;
   QTableWidgetItem *twi;
   QList<Device*> deviceList;
};
 

а в нем уже табличный итем  QTableWidgetItem *twi;

Для каждой станции свой QTableWidgetItem и QTreeWidgetItem
« Последнее редактирование: Август 28, 2013, 12:00 от demaker » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Август 28, 2013, 12:04 »

айтемы проще на лету создавать чем хранить в поле класса

да, и «станция» по-английски пишется без буквы n. *чувствую сейчас последует что-то вроде «сейчас я сосредоточен на задаче, а всякие красивости буду делать после»*
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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