Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Наведении мыши на объекты QMenu верхнего уров 
:(
    Опции темы
SubaroMows
Дата 8.3.2011, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Доброго времени суток. 
Есть стандартная программа со стандартным меню, при наведении мыши на элемент Action в меню, в строке состояния отображается подсказка, которая задаётся в рукопашную в поле statusTrip, как показано на рисунке.
 user posted image

Далее встала задача чтобы подсказки выводились для верхних меню:File, Edit, Help. 
Пример на рисунке:
 user posted image

Как ни странно но у них тоже есть поля statusStrip, но они не работают. 
Стал искать окольные пути через eventFilter и mouseMoveEvent.
Первый вариант:
...
Код

fileMenu = mainMenuBar->addMenu("File");
....
bool GlobalForm::eventFilter(QObject *obj, QEvent *evt)
{
    if(obj == fileMenu)
    {
        if(evt->type() == QEvent::Enter)
            QMessageBox::information(this,"Good test","Well, it is work.");
    }
    return QObject::eventFilter(obj,evt);
}

Сколько не крутил мышкой возле File, тестовое сообщение так и не выдало.
Второй вариант:
Предварительно установил setMouseTracking(true);
Код

void GlobalForm::mouseMoveEvent(QMouseEvent* event)
{
    QPoint pos = event->pos();
    QString strX,strY;
    strX.setNum(pos.x());
    strY.setNum(pos.y());
    QPoint posTarget = mainMenuBar->mapToParent(QPoint(0,0));

    QString strX1,strY1;
    strX1.setNum(posTarget.x());
    strY1.setNum(posTarget.y());
    if(pos.x()>posTarget.x() && pos.x()<posTarget.x()+50 && pos.y()>posTarget.y() && pos.y()<posTarget.y()+30)
        QMessageBox::information(this,"",tr("\"%1").arg(strX1));
}


результат тоже 0.

Друзья помогите решить эту задачку, очень надо.


PM MAIL   Вверх
_GRIN_
Дата 18.3.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



Вообщем тебе надо глядеть имплементацию QMenuBar - куда айтемы добавляются - я тут глянул побыстрому - QMenu не получает ни eventInter(), ни underMouse() у него не работает (хотя курсор на надписи айтема) - судя по всему отображается только QMenuBar и просто использует данные от добавленных айтемов. Т.к. если добавить таймер в наследника QMenu и поглядеть его состояния следующим образом:
Код

void MenuItem::timeout() // class MenuItem : public QMenu
{
    qDebug() << "MenuItem::timeout(): " << isVisible() << underMouse() << rect();
}


то мы увидим, что изначально айтем невидим (хотя мы видим надпись (причём имеет какой-то очень уж большой размер):
Код

MenuItem::timeout():  false false QRect(0,0 640x480) 

кликнув на айтеме мы видим, что он стал видим, но его размер нулевой!!!
Код

MenuItem::timeout():  true false QRect(0,0 0x0) 

убрав выделение (перейдя на другой айтем) мы видим, что убрался только флаг видимости, размер остался нулевым
Код

MenuItem::timeout():  false false QRect(0,0 0x0)


естественно, что при нулевом размере мы никогда не получим событие eventEnter() и соответственно не отобразим сообщение в статусбаре



--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.