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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите с QApplication::focusWidget()!  (Прочитано 4030 раз)
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'

Как исправить ошибку, или может проблему вообще как-то по-другому решить можно?
Записан
BRE
Гость
« Ответ #1 : Декабрь 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 используешь?
Записан
FrodoNew
Гость
« Ответ #2 : Декабрь 03, 2009, 09:22 »

Пробовал по разному:
и

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

и через qApp

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

QApplication::focusWidget();

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

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

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

Легко. Писать правильно, а не искать какие-то там функции.
И еще задавать такие вопрсы в разделе "Вопросы новичков"
Записан
BRE
Гость
« Ответ #4 : Декабрь 03, 2009, 09:36 »

В Qt3 QApplication::focusWidget не static метод, поэтому:
qApp->focusWidget.

Как твой класс-наследник от QObject может иметь фокус?
Записан
FrodoNew
Гость
« Ответ #5 : Декабрь 03, 2009, 09:43 »

сейчас попробую qApp->...

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


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