Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Alex Custov от Октябрь 17, 2008, 19:24



Название: менять курсор над элементом в QListWidget [closed]
Отправлено: Alex Custov от Октябрь 17, 2008, 19:24
Есть может быть праздный вопрос, но я не нашёл решения. Как менять курсор, когда указатель находится над элементом в QListWidget? Скажем на Qt::PointingHandCursor?


Название: Re: менять курсор над элементом в QListWidget
Отправлено: Hellraiser от Октябрь 17, 2008, 20:18
Код:
myListWidget->setCursor(Qt::PointingHandCursor)


Название: Re: менять курсор над элементом в QListWidget
Отправлено: Alex Custov от Октябрь 17, 2008, 20:22
это поменяет курсор на всём listwidget'e. А мне надо только надо элементами, как в файловом менеджере типа Конка. Можно отслеживать mouseMoveEvent, и постоянно дёргать itemAt но это как-то криво. По другому нельзя?


Название: Re: менять курсор над элементом в QListWidget
Отправлено: ритт от Октябрь 17, 2008, 21:06
а в чём заключается кривость?


Название: Re: менять курсор над элементом в QListWidget
Отправлено: Alex Custov от Октябрь 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);
    }

Я поэтому и спросил, может есть решение попрямее :(


Название: Re: менять курсор над элементом в QListWidget
Отправлено: ритт от Октябрь 17, 2008, 21:18
лично я не вижу никакой нелогики. посмотри на QTabBar...

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


Название: Re: менять курсор над элементом в QListWidget
Отправлено: pastor от Октябрь 18, 2008, 12:42
но никто не мешает написать сагест троллям.

+100


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


Название: Re: менять курсор над элементом в QListWidget
Отправлено: ритт от Октябрь 18, 2008, 14:01
а можно даже придумать свою ItemCursorRole (UserRole + шишнадцать) и через data/setData айтема по этой роли манипулировать иконкой курсора...

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

упд. с другой стороны, если бы подобное провести для _всех_ item-based моделей/вьюх, code less было бы чуть более code less'естее :)


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

а как отловить событие покидания мышью области элемента? Такого события или сигнала нет.


Название: Re: менять курсор над элементом в QListWidget
Отправлено: ритт от Октябрь 21, 2008, 21:25
tem/oldItem :)


Название: Re: менять курсор над элементом в QListWidget
Отправлено: Alex Custov от Октябрь 21, 2008, 21:37
tem/oldItem :)

Не будет работать нормально, т.к. между элементами есть пустое место.


Название: Re: менять курсор над элементом в QListWidget [closed]
Отправлено: ритт от Октябрь 21, 2008, 21:48
ну, и будет там -1...вот же ж проблема


Название: Re: менять курсор над элементом в QListWidget
Отправлено: Rcus от Октябрь 22, 2008, 05:08
а как отловить событие покидания мышью области элемента? Такого события или сигнала нет.
Есть QAbstractItemView::viewportEntered() :)