И как переопределить?
Когда дело касается 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
uint pos = 0;
ListItem *i;
for ( i = itemList.first(); i!=0; i = itemList.next() ) {
if (i->fullName > item->fullName) break;
pos++;
}
itemList.insert ( pos, item );