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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: менять курсор над элементом в QListWidget [closed]  (Прочитано 9619 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« : Октябрь 17, 2008, 19:24 »

Есть может быть праздный вопрос, но я не нашёл решения. Как менять курсор, когда указатель находится над элементом в QListWidget? Скажем на Qt::PointingHandCursor?
« Последнее редактирование: Октябрь 21, 2008, 21:38 от Alex Custov » Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #1 : Октябрь 17, 2008, 20:18 »

Код:
myListWidget->setCursor(Qt::PointingHandCursor)
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Октябрь 17, 2008, 20:22 »

это поменяет курсор на всём listwidget'e. А мне надо только надо элементами, как в файловом менеджере типа Конка. Можно отслеживать mouseMoveEvent, и постоянно дёргать itemAt но это как-то криво. По другому нельзя?
Записан
ритт
Гость
« Ответ #3 : Октябрь 17, 2008, 21:06 »

а в чём заключается кривость?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Октябрь 17, 2008, 21:15 »

а в чём заключается кривость?

в нелогичности действий. Ведь самое логичное было бы

Код:
QListWidgetItem *item = new QListWidgetItem("hello");
item->setCursor(Qt::PointingHandCursor);

А так приходится использовать mouseMoveEvent в QListWidget, и постоянно вызывать itemAt:

Код:
    void MyListWidget::mouseMoveEvent(QMouseEvent *e)
    {
        QListWidgetItem *i = itemAt(e->pos());

        if(i)
            setCursor(Qt::PointingHandCursor);
        else
            setCursor(Qt::ArrowCursor);
    }

Я поэтому и спросил, может есть решение попрямее Грустный
Записан
ритт
Гость
« Ответ #5 : Октябрь 17, 2008, 21:18 »

лично я не вижу никакой нелогики. посмотри на QTabBar...

но никто не мешает написать сагест троллям.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Октябрь 18, 2008, 12:42 »

но никто не мешает написать сагест троллям.

+100
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Rcus
Гость
« Ответ #7 : Октябрь 18, 2008, 13:44 »

Помоему существующих механизмов вполне достаточно для осуществления задуманного, напимер так:
Код:
void test::on_listWidget_itemEntered(QListWidgetItem* item)
{
ui.listWidget->setCursor(item->text()=="0" ? Qt::IBeamCursor : Qt::ArrowCursor);
}
(работает если для виджета включить mouseTracking).
Записан
ритт
Гость
« Ответ #8 : Октябрь 18, 2008, 14:01 »

а можно даже придумать свою ItemCursorRole (UserRole + шишнадцать) и через data/setData айтема по этой роли манипулировать иконкой курсора...

фигня всё...на месте троллей я бы не стал добавлять данную "фичу" в стандартный функционал...

упд. с другой стороны, если бы подобное провести для _всех_ item-based моделей/вьюх, code less было бы чуть более code less'естее Улыбающийся
« Последнее редактирование: Октябрь 18, 2008, 14:03 от Константин » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #9 : Октябрь 21, 2008, 21:23 »

Помоему существующих механизмов вполне достаточно для осуществления задуманного, напимер так:
Код:
void test::on_listWidget_itemEntered(QListWidgetItem* item)
{
ui.listWidget->setCursor(item->text()=="0" ? Qt::IBeamCursor : Qt::ArrowCursor);
}
(работает если для виджета включить mouseTracking).

а как отловить событие покидания мышью области элемента? Такого события или сигнала нет.
Записан
ритт
Гость
« Ответ #10 : Октябрь 21, 2008, 21:25 »

tem/oldItem Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #11 : Октябрь 21, 2008, 21:37 »

tem/oldItem Улыбающийся

Не будет работать нормально, т.к. между элементами есть пустое место.
Записан
ритт
Гость
« Ответ #12 : Октябрь 21, 2008, 21:48 »

ну, и будет там -1...вот же ж проблема
Записан
Rcus
Гость
« Ответ #13 : Октябрь 22, 2008, 05:08 »

а как отловить событие покидания мышью области элемента? Такого события или сигнала нет.
Есть QAbstractItemView::viewportEntered() Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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