Название: Помогите с 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::ficusWidget используешь?Пошарился по форуму... Все решения сводятся к работе с 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()! Отправлено: 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. Менять структура класса мне нельзя... |