Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: FrodoNew от Декабрь 03, 2009, 09:08



Название: Помогите с QApplication::focusWidget()!
Отправлено: FrodoNew от Декабрь 03, 2009, 09:08
В общем, проблема такая: на главной форме есть 2 виджета - контейнера. На первом есть страницы-вкладки, на втором нет. Для первого виджета прописаны комбинации горячих клавиш, которые переключают вкладки. Проблема в том, что когда активен ВТОРОЙ виджет, при нажатии на горячие клавиши все равно срабатывает переключение вкладок. Была следующая задумка решения: когда срабатывает горячая клавиша, при запуске функции проверить, активен ли первый виджет-контейнер, если да - выполнить, нет - не выполнять.
Пошарился по форуму...
Все решения сводятся к  работе с QApplication::focusWidget(), но на сию строку компилятов (MS VS 2005) ругается:

1>.\MainWidget.cpp(76) : error C2352: 'QApplication::focusWidget' : illegal call of non-static member function
1>        D:\3.3.8\include\qapplication.h(132) : see declaration of 'QApplication::focusWidget'

Как исправить ошибку, или может проблему вообще как-то по-другому решить можно?


Название: Re: Помогите с QApplication::focusWidget()!
Отправлено: BRE от Декабрь 03, 2009, 09:13
В общем, проблема такая: на главной форме есть 2 виджета - контейнера. На первом есть страницы-вкладки, на втором нет. Для первого виджета прописаны комбинации горячих клавиш, которые переключают вкладки. Проблема в том, что когда активен ВТОРОЙ виджет, при нажатии на горячие клавиши все равно срабатывает переключение вкладок. Была следующая задумка решения: когда срабатывает горячая клавиша, при запуске функции проверить, активен ли первый виджет-контейнер, если да - выполнить, нет - не выполнять.
Пошарился по форуму...
Все решения сводятся к  работе с QApplication::focusWidget(), но на сию строку компилятов (MS VS 2005) ругается:

1>.\MainWidget.cpp(76) : error C2352: 'QApplication::focusWidget' : illegal call of non-static member function
1>        D:\3.3.8\include\qapplication.h(132) : see declaration of 'QApplication::focusWidget'

Как исправить ошибку, или может проблему вообще как-то по-другому решить можно?
А ты как QApplication::ficusWidget используешь?


Название: Re: Помогите с QApplication::focusWidget()!
Отправлено: FrodoNew от Декабрь 03, 2009, 09:22
Пробовал по разному:
и

if (QApplication::focusWidget()==this)
{
 //Код выполнения
}

и через qApp

Но причина не в этом, если просто даже написать

QApplication::focusWidget();

То уже выдает ошибку...
Разумеется #include <qapplication.h> есть.

Просто забыл уточнить, класс, в котором обрабатывается эта функция, самописная, и дочерий напрямую от QObject, поэтому при сравнении if (QApplication::focusWidget()==this) он разумеется не сравнит QWidjet и мой класс...
Можно как-нибудь выкрутиться, или есть какие аналогичные функции?


Название: Re: Помогите с QApplication::focusWidget()!
Отправлено: spectre71 от Декабрь 03, 2009, 09:33
Просто забыл уточнить, класс, в котором обрабатывается эта функция, самописная, и дочерий напрямую от QObject, поэтому при сравнении if (QApplication::focusWidget()==this) он разумеется не сравнит QWidjet и мой класс...
Можно как-нибудь выкрутиться, или есть какие аналогичные функции?

Легко. Писать правильно, а не искать какие-то там функции.
И еще задавать такие вопрсы в разделе "Вопросы новичков"


Название: Re: Помогите с QApplication::focusWidget()!
Отправлено: BRE от Декабрь 03, 2009, 09:36
В Qt3 QApplication::focusWidget не static метод, поэтому:
qApp->focusWidget.

Как твой класс-наследник от QObject может иметь фокус?


Название: Re: Помогите с QApplication::focusWidget()!
Отправлено: FrodoNew от Декабрь 03, 2009, 09:43
сейчас попробую qApp->...

А насчет того, что мой класс имеет фокус, я не писал. Я говорю, что он содержит функции, которые обрабатываются при нажатии на горячие клавиши.
В конструктор класса передается объект parent типа QWidget. Менять структура класса мне нельзя...