Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Авварон от Ноябрь 14, 2010, 00:21



Название: Можно ли сделать тривьюху без наследования?
Отправлено: Авварон от Ноябрь 14, 2010, 00:21
Мне хочется сделать виджет древесной структуры (то есть QTreeView в нем будет), однако внешнее АПИ не должно предоставлять доступ ко всем ф-иям QTreeView. Примерное решение - отнаследоваться от QAbstractScrollArea, хранить указатель на QTreeView в себе и перебрасывать виртуал методы скроллареи на вьюху. Однако тут видимые косяки как минимум косяк с фокусом - он будет на внутреннем виджете, а не на внешнем. Можно ли это как-то обойти? Если запретить фокус полиси для вьюхи и пробросить keyBoardEvent на нее, то она будет как бы "не в фокусе" - серая - тоже нехорошо.


Название: Re: Можно ли сделать тривьюху без наследования?
Отправлено: GreatSnake от Ноябрь 14, 2010, 00:50
И для чего такой изврат?
setFocusProxy?


Название: Re: Можно ли сделать тривьюху без наследования?
Отправлено: Авварон от Ноябрь 14, 2010, 01:46
Вау, не знал, спасибо:) А еще косяки могуть быть, помимо мильена проброса методов?


Название: Re: Можно ли сделать тривьюху без наследования?
Отправлено: kirill от Ноябрь 15, 2010, 11:00
Сделать защищенное наследование

class TV : protected QTableView
{
public:
   TV(){}
};

попытка использовать
   TV tv;
   tv.rowAt(0);

1>test.cpp(156) : error C2247: 'QTableView::rowAt' not accessible because 'TV' uses 'protected' to inherit from 'QTableView'


Название: Re: Можно ли сделать тривьюху без наследования?
Отправлено: Авварон от Ноябрь 15, 2010, 11:11
Ага, а еще нам его не дадут положить в лайаут, тк QWidget - "недостижимый предок"
Вообще отнаследовался от QWidget - у скроллареи нет полезных паблик методов и положил вьюху на этот виджет. Фокус поправил, как посоветовали. Вроде косяков пока нет.