Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Smogg от Февраль 11, 2013, 14:56



Название: Меню окна в VS
Отправлено: Smogg от Февраль 11, 2013, 14:56
Каким-то странным образом меню окна (то, которое File... вместе с прочими About...'ами) не реагирует на нажатие мышки. При этом на нажатие Alt с клавы оно открывается.

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

Компилирую из под Visual Studio.


Название: Re: Меню окна в VS
Отправлено: Bepec от Февраль 11, 2013, 15:07
в твоём коде...


Название: Re: Меню окна в VS
Отправлено: Smogg от Февраль 11, 2013, 15:36
Да, в моем коде. Новый голый проект с меню не глючит.

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


Название: Re: Меню окна в VS
Отправлено: Old от Февраль 11, 2013, 15:40
Тогда вопрос по другому, как можно  добиться, чтобы строка меню не реагировало на мышь и отвечало на клаву?
Перехватывать события мыши для меню и не правильная их обработка?


Название: Re: Меню окна в VS
Отправлено: Smogg от Февраль 11, 2013, 15:46

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

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

Upd.
Какой-то абсурд... Начало меню, пикселей так 60, на мышку не реагируют сапсем. Чуть сдвинуть вправо дальше этих 60, оставаясь на том же пункте меню - сразу подсвечивается.


Название: Re: Меню окна в VS
Отправлено: Old от Февраль 11, 2013, 16:59
Upd.
Какой-то абсурд... Начало меню, пикселей так 60, на мышку не реагируют сапсем. Чуть сдвинуть вправо дальше этих 60, оставаясь на том же пункте меню - сразу подсвечивается.
Там виджет какой-то болтается...


Название: Re: Меню окна в VS
Отправлено: Smogg от Февраль 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" не выскакивает.
 Т.е. указатель действительно на что-то указывает, но программного имени у этого чего-то нету...


Название: Re: Меню окна в VS
Отправлено: Old от Февраль 11, 2013, 18:16
Ищи виджет без родителя и не установленный не в один компоновщик.


Название: Re: Меню окна в VS
Отправлено: Smogg от Февраль 11, 2013, 19:27
При попытке скрыть - скрывается без вопросов.
Его родитель - само окно, такой же как и y menuBar'a  .

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

Можно ли что-нибудь узнать про виджет, если есть только указатель на него? Напрмер, класс?


Название: Re: Меню окна в VS
Отправлено: Old от Февраль 11, 2013, 19:30
Можно ли что-нибудь узнать про виджет, если есть только указатель на него? Напрмер, класс?
Можно. Но ты его сам в своих исходниках найти не можешь? :)

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


Название: Re: Меню окна в VS
Отправлено: Smogg от Февраль 11, 2013, 20:39
Можно ли что-нибудь узнать про виджет, если есть только указатель на него? Напрмер, класс?
Можно. Но ты его сам в своих исходниках найти не можешь? :)

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

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

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