Название: Сортировка QPtrList Отправлено: cresta от Июль 31, 2007, 13:20 Добрый день. Проблема с методом sort класса QPtrList.
Создаю объекты (итемы) и запихиваю в QPtrList. Отсортировать не получается. в файле MyList.h такой код: Код: class MyList : public QDialog{ в файле MyList.cpp: Код: void MyList::loadList (QStringList sList){ но функция сравнения int compareItems (QPtrCollection::Item item1, QPtrCollection::Item item2) не вызывается. Что здесь неправильно? Можно конечно и вручныю отсортровать, но хотелось бы понять в чем дело? Спасибо. Название: Сортировка QPtrList Отправлено: SABROG от Июль 31, 2007, 13:41 А где ты передаешь указатель на свой метод сравнения ?
Код:
Название: Сортировка QPtrList Отправлено: cresta от Июль 31, 2007, 18:49 Не понял. Как передать и кому передать указатель на compareItems?
У меня есть экземпляр QPtrList. И как ему передать указатель на функцию сравнения? Метод QPtrList::sort() никаких параметров не принимает, чтобы с ним можно было бы передать указатель. ??? qt 3.3 Название: Сортировка QPtrList Отправлено: pastor от Июль 31, 2007, 20:28 2 cresta: Ткни меня носом в то место, где ты переопределил метод compareItems для QPtrList. Не удивительно что она у теьбя не вызываеться ))))
Название: Сортировка QPtrList Отправлено: cresta от Июль 31, 2007, 20:56 И как переопределить?
Когда дело касается virtual protected функций (например eventFilter), я объявляю её в файле заголовка с таким же именем eventFilter, и пишу свою реализацию eventFilter(). Моя реализация и перекрывает стандартную функцию. При этом я пишу её в файле .cpp как void MyClass::eventFilter(){ ///// } Т.е. MyClass является наследником класса, имеющего метод eventFilter(). Но у меня нет отдельного класса - надстройки над QPtrList, чтобы можно было бы сделать по подобию eventFilter(): int MyCoolClass::compareitems(){ /// } Это ерунда, и вполне справедливо не компилируется, т.к. MyCoolClass не имеет такого метода: compareitems(). Что, лепить ещё один класс - оболочку над классом QPtrList? Я конечно могу в своём классе придумать функцию compareitems(), и наполнить её нужной реализацией. но QPtrList ничего не знает о существовании в каком-то там классе какой-то там функции, которая может сравнивать итемы. Функция существовать будет, но метод класса QPtrList она не перекроет. Есть способ перекрыть функцию класса QPtrList не прибегая к построению надстройки? Чтобы это было проще, чем я сделал сейчас, добавляя итемы не методом append, а по месту в соответствие с алфавитом: Код: //insert new item in list order by fullName Название: Сортировка QPtrList Отправлено: SABROG от Июль 31, 2007, 21:31 функция qSort() есть в 3.3 ?
Название: Сортировка QPtrList Отправлено: cresta от Июль 31, 2007, 21:41 quicksort в 3.3 нет.
Да собственно нарисовать функцию сортировки и отсортировать не проблема. И qSort у меня есть реализованый. Хотел просто понять механизм вызова callback функции. Видимо надо сверху над классом делать ещё класс, чтобы перекрыть в нем метод compareitems() наследуемого класса. Блин, как это всё громоздко :( Название: Сортировка QPtrList Отправлено: pastor от Июль 31, 2007, 22:04 2 cresta: Тебе нужно наследоваться от QPtrList и переопределить метод compareitems со своей реализацией. По другому никак.
Название: Сортировка QPtrList Отправлено: cresta от Август 01, 2007, 11:15 Ну раз только с наследованием, проще самому отсортировать.
Спасибо всем. |