Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Exception13 от Июль 21, 2009, 15:13



Название: как узнать размеры курсора ?
Отправлено: Exception13 от Июль 21, 2009, 15:13
Поиск по форуму ответа не дал, так что решил обратиться к сообществу...
Вобщем хочу узнать размер курсора мыши установленного для конкретного виджета.

варианты типа:
const QBitmap *bm = cursor().bitmap()

bm->width(),
bm->height()

не прокатывают т.к. если в системе используется стандартный курсор, то "cursor().bitmap()" возвращает NULL.

Может в QT есть что то типа GetSystemMetrics как в виндовсе ?


Название: Re: как узнать размеры курсора ?
Отправлено: Exception13 от Июль 27, 2009, 08:15
Видимо вопрос был совсем ламерский, никто не хочет отвечать :)
Ну и ладно, пойдем по пути наименьшего сопротивления и забъем в код фиксированные размеры курсора...


Название: Re: как узнать размеры курсора ?
Отправлено: BigZ от Июль 27, 2009, 08:45
Видимо вопрос был совсем ламерский, никто не хочет отвечать :)
Ну и ладно, пойдем по пути наименьшего сопротивления и забъем в код фиксированные размеры курсора...
Прошу прощения, к делу по сути не относится, а в какой задаче может понадобиться получение
размеров курсора в рантайме?


Название: Re: как узнать размеры курсора ?
Отправлено: Exception13 от Июль 27, 2009, 16:33
У меня самописный компонент типа "шкала времени", при наведении курсора мыши на данный виджет, хотелось бы чтобы рядом с курсором появилось окно с датой/временем.
вобщем, что то типа toolTip'a. Думал все, что можно как то обычный toolTip прикрутить - но, что то ничего и не придумал. В конце концов сделал простенький widget для отображения даты/времени и стал его выводить рядом с курсором мыши.
hotSpot у курсора известен, а вот его геометрия - нет.
Размеры курсора мне бы хотелось узнать для того, чтобы вывести этот toolTip под стрелочкой мыши, но так, чтобы она его не перекрывала.

Выглядит сие художество примерно так:


Название: Re: как узнать размеры курсора ?
Отправлено: spectre71 от Июль 27, 2009, 17:19
У меня самописный компонент типа "шкала времени", при наведении курсора мыши на данный виджет, хотелось бы чтобы рядом с курсором появилось окно с датой/временем.
вобщем, что то типа toolTip'a. Думал все, что можно как то обычный toolTip прикрутить - но, что то ничего и не придумал.  не перекрывала.
Воспользуйся QToolTip::showText; QToolTip::hideText;
Примерно так

Код
C++ (Qt)
void MyWidget::mouseMoveEvent(QMouseEvent* e) {
 QString MyHint = getMyHiintByPosition(e->pos())
 if(MyHint .isEmpty()) {
   QToolTip::hideText();
 } else {
   QToolTip::showText(e->globalPos(), MyHint, this);
 }
}





Название: Re: как узнать размеры курсора ?
Отправлено: BigZ от Июль 27, 2009, 22:48
У меня самописный компонент типа "шкала времени", при наведении курсора мыши на данный виджет, хотелось бы чтобы рядом с курсором появилось окно с датой/временем.
вобщем, что то типа toolTip'a. Думал все, что можно как то обычный toolTip прикрутить - но, что то ничего и не придумал. В конце концов сделал простенький widget для отображения даты/времени и стал его выводить рядом с курсором мыши.
hotSpot у курсора известен, а вот его геометрия - нет.
Размеры курсора мне бы хотелось узнать для того, чтобы вывести этот toolTip под стрелочкой мыши, но так, чтобы она его не перекрывала.

Выглядит сие художество примерно так:

Теперь понятно.


Название: Re: как узнать размеры курсора ?
Отправлено: Exception13 от Июль 28, 2009, 09:13
Воспользуйся QToolTip::showText; QToolTip::hideText;

А, не, я так уже пробовал, ToolTip всплывает ооооооооооочень ммееедленно, т.е. пока курсор мыши стоит в какой либо позиции достаточно длительное время - подсказка вылезает, а мне бы хотелось чтобы он следовал вместе с курсором мыши. Где определяется время задержки для данного компонента - я так и не нашел.


Название: Re: как узнать размеры курсора ?
Отправлено: spectre71 от Июль 28, 2009, 10:47
Воспользуйся QToolTip::showText; QToolTip::hideText;
А, не, я так уже пробовал, ToolTip всплывает ооооооооооочень ммееедленно, т.е. пока курсор мыши стоит в какой либо позиции достаточно длительное время - подсказка вылезает, а мне бы хотелось чтобы он следовал вместе с курсором мыши. Где определяется время задержки для данного компонента - я так и не нашел.
Ничего подобного.
1) QToolTip::showText - всплывает сразу, при вызове! и по новым координатам если:
  - В данный момент нет видимого ToolTip
  ИЛИ
  - В данный момент есть видимый ToolTip, но с другим текстом!
  ИЛИ
  - В данный момент есть видимый ToolTip, с этим же текстом, но на другом виджите!
2) В остальных случаях изменений не будет
3) А вот hideText или что то же самое showText от пустой строки, всегда срабатывает с задержкой, но это меньшее из зол.
4) Ты либо вызывал QToolTip::showText на событие QEvent::ToolTip, либо делал виджету setToolTip, в этом случае и будет задержка!
5) Сделай простой тест и убедишься сам:

Код
C++ (Qt)
void MyWidget::mouseMoveEvent(QMouseEvent* e) {
 QString MyHint = QString::number(e->pos().x()) + "," + QString::number(e->pos().y());
 QToolTip::showText(e->globalPos(), MyHint, this);
}


 


Название: Re: как узнать размеры курсора ?
Отправлено: Exception13 от Июль 28, 2009, 13:37
О, спасибо, вот про эти если... я и не прочитал доку, сейчас глянул, действительно так и есть.
Еще раз спасибо тов. Spectre


Название: Re: как узнать размеры курсора ?
Отправлено: SASA от Июль 29, 2009, 14:50
И всё же, как узнать размеры курсора ?


Название: Re: как узнать размеры курсора ?
Отправлено: spectre71 от Июль 30, 2009, 08:22
И всё же, как узнать размеры курсора ?
Своего легко, по размерам Bitmap.
Стандартных, видимо только по вбитым константам!