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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Меню окна в VS  (Прочитано 3797 раз)
Smogg
Гость
« : Февраль 11, 2013, 14:56 »

Каким-то странным образом меню окна (то, которое File... вместе с прочими About...'ами) не реагирует на нажатие мышки. При этом на нажатие Alt с клавы оно открывается.

Не подскажите, в чем может быть дело?

Компилирую из под Visual Studio.
Записан
Bepec
Гость
« Ответ #1 : Февраль 11, 2013, 15:07 »

в твоём коде...
Записан
Smogg
Гость
« Ответ #2 : Февраль 11, 2013, 15:36 »

Да, в моем коде. Новый голый проект с меню не глючит.

Тогда вопрос по другому, как можно  добиться, чтобы строка меню не реагировало на мышь и отвечало на клаву? Причем, если меню раскроется, то выпавший список мышкой выбирается...
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Февраль 11, 2013, 15:40 »

Тогда вопрос по другому, как можно  добиться, чтобы строка меню не реагировало на мышь и отвечало на клаву?
Перехватывать события мыши для меню и не правильная их обработка?
Записан
Smogg
Гость
« Ответ #4 : Февраль 11, 2013, 15:46 »


Перехватывать события мыши для меню и не правильная их обработка?

Мышь не перехватывал.
Да, вспомнил. Я удалял меню, а потом снова добавил. И наверно от этого что-то где-то потерялось...

Upd.
Какой-то абсурд... Начало меню, пикселей так 60, на мышку не реагируют сапсем. Чуть сдвинуть вправо дальше этих 60, оставаясь на том же пункте меню - сразу подсвечивается.
« Последнее редактирование: Февраль 11, 2013, 16:54 от Smogg » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Февраль 11, 2013, 16:59 »

Upd.
Какой-то абсурд... Начало меню, пикселей так 60, на мышку не реагируют сапсем. Чуть сдвинуть вправо дальше этих 60, оставаясь на том же пункте меню - сразу подсвечивается.
Там виджет какой-то болтается...
Записан
Smogg
Гость
« Ответ #6 : Февраль 11, 2013, 18:11 »


Там виджет какой-то болтается...


Да, какая-то дрянь вылезла... И как про нее узнать что нибудь конкретное?

Сочинил вот такой обработчик таймера:
Код:
void LazyWnd::tmrAct(){
POINT pnt;

GetCursorPos(&pnt);
QWidget * wid = QApplication::widgetAt(pnt.x, pnt.y );
if (wid != nullptr)
{
ui.lblTmr->setText( QString::number((DWORD)wid) + " " +wid->objectName());
}
else
{
ui.lblTmr->setText( "No widget");
}
}

При переводе мышки числовое значение меняется и пропадает название переменной для подуказательного виджета. "No widget" не выскакивает.
 Т.е. указатель действительно на что-то указывает, но программного имени у этого чего-то нету...
« Последнее редактирование: Февраль 11, 2013, 18:15 от Smogg » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Февраль 11, 2013, 18:16 »

Ищи виджет без родителя и не установленный не в один компоновщик.
Записан
Smogg
Гость
« Ответ #8 : Февраль 11, 2013, 19:27 »

При попытке скрыть - скрывается без вопросов.
Его родитель - само окно, такой же как и y menuBar'a  .

Искать безымянный widget можно, но это некрасиво.
При старте программы скрывать всех чайлдов, а потом показать только те, что нужно - как то не то чтобы очень...

Можно ли что-нибудь узнать про виджет, если есть только указатель на него? Напрмер, класс?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Февраль 11, 2013, 19:30 »

Можно ли что-нибудь узнать про виджет, если есть только указатель на него? Напрмер, класс?
Можно. Но ты его сам в своих исходниках найти не можешь? Улыбающийся

Смотри:
const QMetaObject * QObject::metaObject () const [virtual]
const char * QMetaObject::className () const
Записан
Smogg
Гость
« Ответ #10 : Февраль 11, 2013, 20:39 »

Можно ли что-нибудь узнать про виджет, если есть только указатель на него? Напрмер, класс?
Можно. Но ты его сам в своих исходниках найти не можешь? Улыбающийся

Смотри:
const QMetaObject * QObject::metaObject () const [virtual]
const char * QMetaObject::className () const

Йехууу!! Finally! Спасибо!

У этой фигни класс - TrayIcon)) Который создал я, и назначил родителем первый попавшийся виджет, то есть главное окно. Этот TrayIcon наследовался от Qwidget и вот почему отображался, хотя правильно отбражаться не умеет (нафиг работающему с треем классу какое-лтбо визуальное отображение?).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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