Название: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 05, 2016, 21:45 Создал свой класс от QAbstractItemDelegate для рисования изображения в QTableView
Все нормально рисуется. Теперь вопрос: как сделать чтобы при наведении на изображении рисовался увеличенный вариант? или хотябы при нажатии на него? Почему событие paint не вызывается когда я нажимаю на ячейку с картикой? но когда я пытаюсь прокрутить колесеко мышки оно тут же вызывается... Название: Re: QAbstractItemDelegate Отправлено: Racheengel от Февраль 06, 2016, 00:47 Потому что при нажатии перерисовки не происходит, а при скролле - да.
Для Вашей проблемы я бы сделал решение в виде отдельного окна, в котором бы рисовал превью. Название: Re: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 06, 2016, 02:30 Потому что при нажатии перерисовки не происходит, а при скролле - да. у меня итак и при двойном клике выходит отдельное на весь экран окно с изображением)Для Вашей проблемы я бы сделал решение в виде отдельного окна, в котором бы рисовал превью. а хотелось бы при наведении или нажатии видеть чуть больше чем изначально... Название: Re: QAbstractItemDelegate Отправлено: Igors от Февраль 06, 2016, 08:26 как сделать чтобы при наведении на изображении рисовался увеличенный вариант? или хотябы при нажатии на него? 1) Отслеживаете сами вход/выход из ячейки. Заводите переменную типа QPersistentModelIndex. Перекрываете viewportEvent и там заряжаете индекс и делаете viewport().update().2) В делегате рисуете так или сяк в зависимости от сравнения пришедшего индекса с запомненным Название: Re: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 07, 2016, 19:09 как сделать чтобы при наведении на изображении рисовался увеличенный вариант? или хотябы при нажатии на него? 1) Отслеживаете сами вход/выход из ячейки. Заводите переменную типа QPersistentModelIndex. Перекрываете viewportEvent и там заряжаете индекс и делаете viewport().update().2) В делегате рисуете так или сяк в зависимости от сравнения пришедшего индекса с запомненным Название: Re: QAbstractItemDelegate Отправлено: kambala от Февраль 07, 2016, 19:11 можно через фильтр событий вместо наследования
Название: Re: QAbstractItemDelegate Отправлено: Igors от Февраль 08, 2016, 02:27 Т.е это мне уже надо наследовать новый класс от QTableView ? Как уже сказали, можно через фильтр, только вешайте его на viewport() (а не на саму таблицу). Есть еще возможность QAbstractItemDelegate::helpEvent, но не уверен что она подойдет - вероятно будет срабатывать с задержкойНазвание: Re: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 08, 2016, 17:31 Что делаю не так? Повесил фильтр
ui->tableView->viewport()->installEventFilter(this); и сам фильтр Код: bool MainWindow::eventFilter(QObject *target, QEvent *event) Название: Re: QAbstractItemDelegate Отправлено: gil9red от Февраль 08, 2016, 17:48 Что делаю не так? Повесил фильтр ui->tableView->viewport()->installEventFilter(this); и сам фильтр Код: bool MainWindow::eventFilter(QObject *target, QEvent *event) А точно нужно на всех событиях перерисовываться? Их бывает очень много... Название: Re: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 08, 2016, 17:55 Что делаю не так? Повесил фильтр ui->tableView->viewport()->installEventFilter(this); и сам фильтр Код: bool MainWindow::eventFilter(QObject *target, QEvent *event) А точно нужно на всех событиях перерисовываться? Их бывает очень много... Название: Re: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 08, 2016, 18:27 Короче вроде сделал с помощью
QAbstractItemDelegate::helpEvent и QToolTip Вроде все работает, но при первом наведении есть задержка секунды 2. Никто не вкурсе как убрать?) И вообще нормальное решение задачи?) Название: Re: QAbstractItemDelegate Отправлено: VPS от Февраль 08, 2016, 22:26 Во вложении небольшой пример на Qt4 (с использованием делегата) увеличения шрифта текста ячейки QTableView при наведении курсора мыши.
P/S: есть минус - если размер ячейки меньше увеличенного текста, то часть его не будет видна. Название: Re: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 09, 2016, 00:23 Во вложении небольшой пример на Qt4 (с использованием делегата) увеличения шрифта текста ячейки QTableView при наведении курсора мыши. Блин, стоило мне добавитьP/S: есть минус - если размер ячейки меньше увеличенного текста, то часть его не будет видна. ui->tableView->setMouseTracking(true); и все заработало) Название: Re: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 09, 2016, 21:20 Еще вопрос, в paint я рисую свое изображение но как теперь в методе sizeHint получить размер нарисованного изображения?
Название: Re: QAbstractItemDelegate Отправлено: kambala от Февраль 09, 2016, 23:26 самому посчитать :)
Название: Re: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 09, 2016, 23:45 самому посчитать :) если я делаю тоже самое что и в paint для получения Qpixmap, то в итоге все нормально, но работает раза в 20 дольше...Название: Re: QAbstractItemDelegate Отправлено: Bepec от Февраль 10, 2016, 00:16 Хранить текущий размер где нить.
Название: Re: QAbstractItemDelegate Отправлено: zagruzkaaa от Февраль 10, 2016, 00:29 Хранить текущий размер где нить. Но это же const методы... ?Название: Re: QAbstractItemDelegate Отправлено: kambala от Февраль 10, 2016, 01:02 ну данные ж явно известны до вызова paint, там и вычислить размер
Название: Re: QAbstractItemDelegate Отправлено: Bepec от Февраль 10, 2016, 01:31 На каждый const мы напишем свой mutable.
Хаки мб и осуждаются программистами, мб и вызовут смех более опытных людей, но сэкономят кучу времени и иногда без них никак :) Сам столкнулся с проблемой делегата константного, думал часа три, и так и эдак пытался. В принципе решил отдельный класс, хранящий данные и высчитывающий их самостоятельно, отдающий их по запросу. PS но с той же эффективностью работает mutable переменная :D PPS интересно в меня плюнут или нет? :P |