Russian Qt Forum
Ноябрь 23, 2024, 17:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QAbstractItemDelegate  (Прочитано 8067 раз)
zagruzkaaa
Гость
« : Февраль 05, 2016, 21:45 »

Создал свой класс от QAbstractItemDelegate для рисования изображения в QTableView
Все нормально рисуется. Теперь вопрос: как сделать чтобы при наведении на изображении рисовался увеличенный вариант? или хотябы при нажатии на него?

Почему событие paint не вызывается когда я нажимаю на ячейку с картикой? но когда я пытаюсь прокрутить колесеко мышки оно тут же вызывается...
« Последнее редактирование: Февраль 06, 2016, 00:28 от zagruzkaaa » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Февраль 06, 2016, 00:47 »

Потому что при нажатии перерисовки не происходит, а при скролле - да.
Для Вашей проблемы я бы сделал решение в виде отдельного окна, в котором бы рисовал превью.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
zagruzkaaa
Гость
« Ответ #2 : Февраль 06, 2016, 02:30 »

Потому что при нажатии перерисовки не происходит, а при скролле - да.
Для Вашей проблемы я бы сделал решение в виде отдельного окна, в котором бы рисовал превью.
у меня итак и при двойном клике выходит отдельное на весь экран окно с изображением)
а хотелось бы при наведении или нажатии видеть чуть больше чем изначально...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Февраль 06, 2016, 08:26 »

как сделать чтобы при наведении на изображении рисовался увеличенный вариант? или хотябы при нажатии на него?
1) Отслеживаете сами вход/выход из ячейки. Заводите переменную типа QPersistentModelIndex. Перекрываете viewportEvent и там заряжаете индекс и делаете viewport().update().
2) В делегате рисуете так или сяк в зависимости от сравнения пришедшего индекса с запомненным
Записан
zagruzkaaa
Гость
« Ответ #4 : Февраль 07, 2016, 19:09 »

как сделать чтобы при наведении на изображении рисовался увеличенный вариант? или хотябы при нажатии на него?
1) Отслеживаете сами вход/выход из ячейки. Заводите переменную типа QPersistentModelIndex. Перекрываете viewportEvent и там заряжаете индекс и делаете viewport().update().
2) В делегате рисуете так или сяк в зависимости от сравнения пришедшего индекса с запомненным

Т.е это мне уже надо наследовать новый класс от QTableView ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Февраль 07, 2016, 19:11 »

можно через фильтр событий вместо наследования
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Февраль 08, 2016, 02:27 »

Т.е это мне уже надо наследовать новый класс от QTableView ?
Как уже сказали, можно через фильтр, только вешайте его на viewport() (а не на саму таблицу). Есть еще возможность QAbstractItemDelegate::helpEvent, но не уверен что она подойдет - вероятно будет срабатывать с задержкой
Записан
zagruzkaaa
Гость
« Ответ #7 : Февраль 08, 2016, 17:31 »

Что делаю не так? Повесил фильтр
ui->tableView->viewport()->installEventFilter(this);
и сам фильтр
Код:
bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
    qobject_cast<QWidget*>(target)->update();
    return QWidget::eventFilter(target, event);
}
Но делегат не перерисовывается...
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Февраль 08, 2016, 17:48 »

Что делаю не так? Повесил фильтр
ui->tableView->viewport()->installEventFilter(this);
и сам фильтр
Код:
bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
    qobject_cast<QWidget*>(target)->update();
    return QWidget::eventFilter(target, event);
}
Но делегат не перерисовывается...

А точно нужно на всех событиях перерисовываться? Их бывает очень много...
Записан

zagruzkaaa
Гость
« Ответ #9 : Февраль 08, 2016, 17:55 »

Что делаю не так? Повесил фильтр
ui->tableView->viewport()->installEventFilter(this);
и сам фильтр
Код:
bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
    qobject_cast<QWidget*>(target)->update();
    return QWidget::eventFilter(target, event);
}
Но делегат не перерисовывается...

А точно нужно на всех событиях перерисовываться? Их бывает очень много...
сделал так для проверки просто. У меня вообще не перерисовывается) Зато как только покручу колесико мышки моментально перерисовывает
Записан
zagruzkaaa
Гость
« Ответ #10 : Февраль 08, 2016, 18:27 »

Короче вроде сделал с помощью
QAbstractItemDelegate::helpEvent и QToolTip
Вроде все работает, но при первом наведении есть задержка секунды 2. Никто не вкурсе как убрать?)
И вообще нормальное решение задачи?)
Записан
VPS
Гость
« Ответ #11 : Февраль 08, 2016, 22:26 »

Во вложении небольшой пример на Qt4 (с использованием делегата) увеличения шрифта текста ячейки QTableView при наведении курсора мыши.

P/S: есть минус - если размер ячейки меньше увеличенного текста, то часть его не будет видна.
Записан
zagruzkaaa
Гость
« Ответ #12 : Февраль 09, 2016, 00:23 »

Во вложении небольшой пример на Qt4 (с использованием делегата) увеличения шрифта текста ячейки QTableView при наведении курсора мыши.

P/S: есть минус - если размер ячейки меньше увеличенного текста, то часть его не будет видна.
Блин, стоило мне добавить
ui->tableView->setMouseTracking(true);
и все заработало)
Записан
zagruzkaaa
Гость
« Ответ #13 : Февраль 09, 2016, 21:20 »

Еще вопрос, в paint я рисую свое изображение но как теперь в методе sizeHint получить размер нарисованного изображения?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Февраль 09, 2016, 23:26 »

самому посчитать Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 23.