Russian Qt Forum

Qt => Общие вопросы => Тема начата: Martiro от Октябрь 14, 2010, 15:03



Название: Как из QList<TCode> ObjectList удалить элемент?
Отправлено: Martiro от Октябрь 14, 2010, 15:03
Есть структура
Код:
typedef struct
{
   short int code1;           
   short int code2;           
   short int typeInterval; 
   short int typeObject;     
   int minValue;                 
   int maxValue;             
} TCode;

На ее основе создается QList
Код:
QList<TCode> ObjectList;

Потом этот ObjectList заполняю
Код:
TCode curSt;
curSt.code1 = 1;
curSt.code2 = 3;
//...
ObjectList.append(curSt);

Когда я хочу удалить из этого QList элемент, пишу:
Код:
//...
ObjectList.removeAt(i);

Компилятор обругивает:
Цитировать
2844: error: passing `const QList<TCode>' as `this' argument of `void QList<T>::removeAt(int) [with T = TCode]' discards qualifiers

Вопросы: Почему? Как дальше быть? ???
Qt4


Название: Re: Как из QList<TCode> ObjectList удалить элемент?
Отправлено: SimpleSunny от Октябрь 14, 2010, 15:13
removeAt неконстантный метод, а ObjectList объявлен с const.


Название: Re: Как из QList<TCode> ObjectList удалить элемент?
Отправлено: Martiro от Октябрь 14, 2010, 16:34
И как же посоветуете поступить в этой ситуации?


Название: Re: Как из QList<TCode> ObjectList удалить элемент?
Отправлено: marbius от Октябрь 14, 2010, 18:51
void myClass::myMethod() const
{  ...
    ObjectList.removeAt(i);
    ...
}

определить метод без const


Название: Re: Как из QList<TCode> ObjectList удалить элемент?
Отправлено: Martiro от Октябрь 14, 2010, 19:29
А он и так не const.
Пока что в голову приходит только как переделать struct в класс от QObject.


Название: Re: Как из QList<TCode> ObjectList удалить элемент?
Отправлено: marbius от Октябрь 14, 2010, 19:42
Ну, я перед этим писал сообщение, а потом его удалил. Смысл его был в том, что Ваш код у меня проходит без ошибок. Я не смог повторить Вашего сообщения об ошибке, пока не поставил const в определение метода. Такие же комментарии на англоязычных просторах интернета имеются про подобного рода ошибки.


Название: Re: Как из QList<TCode> ObjectList удалить элемент?
Отправлено: SimpleSunny от Октябрь 14, 2010, 20:08
Покажите функцию, метод где ругается компилятор.


Название: Re: Как из QList<TCode> ObjectList удалить элемент?
Отправлено: Martiro от Октябрь 15, 2010, 12:09
Код
C
bool objectTree::removeStruct(int iSegNumb, int iRSC, int iCode1, int iCode2)
{
if (tree.count() == 0) return(false);
for (int i = 0; i < tree.count(); i++)
{
curSegment = tree.at(i);
if (iSegNumb == curSegment->SegmentNumber)
{
  for (int j =0; j < curSegment->SegmentList.count(); j++)
     {
       if (curSegment->SegmentList.at(j).RscCode == iRSC)
          {
             for (int l = 0; l < curSegment->SegmentList.at(j).ObjectList.count(); l++)
               {
                 if ((curSegment->SegmentList.at(j).ObjectList.at(l).code1 == iCode1) && (curSegment->SegmentList.at(j).ObjectList.at(l).code2 == iCode2))
                     {
                        curSegment->SegmentList.at(j).ObjectList.removeAt(l);
                        return(true);
                      }
               }
          }
    }
    return(false);
  }
 }
return(false);
}

Где:

Код:
QList<clSegment *> tree;
Код:
clSegment * curSegment;
Код:
class clSegment
{
public:
clSegment();
~clSegment(){;}
short int SegmentNumber;
clObjectDesc curObjectDesc;
QList<clObjectDesc> SegmentList;
};
Код:
class clObjectDesc{
public:
clObjectDesc();
QString NameObject;
int RscCode;
TCode curSt;
QList<TCode> ObjectList;
~clObjectDesc(){;}
};
Код:
typedef struct
{
short int code1;
short int code2;
short int typeInterval;
short int typeObject;
int minValue;
int maxValue;
} TCode;


Название: Re: Как из QList<TCode> ObjectList удалить элемент?
Отправлено: BRE от Октябрь 15, 2010, 13:14
const T & QList::at ( int i ) const

Обрати внимание на слова const.