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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Ошибка с KeyPress!  (Прочитано 13623 раз)
karp2005
Гость
« : Август 03, 2006, 15:06 »

Может кто сталкивался - не могу понять это баг или моя криворукость. Следующий текст:

if ( e->type() == QEvent::KeyPress ) {
             .....
       }

получаем такую ошибку:
 error: expected unqualified-id before numeric constant
 error: expected `)' before numeric constant

При таком варианте
if ( e->type() == 6 ) {    // взял значение константы из qevent.h  
             .....
       }

или таком:

  if ( e->type() == QEvent::Wheel) {  
             .....
       }

Всё работает... В заголовках #include <qevent.h> есть...В чём может быть проблемма? Испрльзую Qt 3.3.4
Записан
QCasper
Гость
« Ответ #1 : Август 03, 2006, 15:49 »

Цитата: "karp2005"
Может кто сталкивался - не могу понять это баг или моя криворукость. Следующий текст:

if ( e->type() == QEvent::KeyPress ) {
             .....
       }

получаем такую ошибку:
 error: expected unqualified-id before numeric constant
 error: expected `)' before numeric constant

При таком варианте
if ( e->type() == 6 ) {    // взял значение константы из qevent.h  
             .....
       }

или таком:

  if ( e->type() == QEvent::Wheel) {  
             .....
       }

Всё работает... В заголовках #include <qevent.h> есть...В чём может быть проблемма? Испрльзую Qt 3.3.4


я в четверке, у меня все ок. Посмотри еще раз, мож где очепятка в коде. Или еще может конфликт какой, хотя пространство имен явно указано... странно конечно.
Записан
Hordi
Гость
« Ответ #2 : Август 03, 2006, 16:25 »

попробуй пробелы убрать - может невидимый символ какой. Синтаксичекси все верно - у меня аналогичный код в проектах начиная с самых первых версий работает.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Январь 24, 2009, 19:13 »

У меня такая же проблема при сборке под линуксом (qt 4.3.4 opensource).
тот же код в винде собирается нормально и студией, и креатором.
Имхо баг линуксовой сборки кути...

Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Dendy
Гость
« Ответ #4 : Январь 24, 2009, 19:35 »

По теме. Макросы - зло. KeyPress - дефайн в заголовочниках иксов. Каким образом вылез наружу - ищите у себя в коде. Скорее всего потому что заголовочники иксов включены после заголовочников Qt, нужно наоборот. Об этом где-то писалось.

Мысли вслух. Смотрю на даты постов и думаю что неплохо было бы закрыть темы полугодичной давности.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Январь 24, 2009, 22:00 »

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

Юра.
Dendy
Гость
« Ответ #6 : Январь 24, 2009, 22:06 »

Цитировать
ну и зря, а если проблема почти таже? А в исходных постах нет ее решения?

Это скорее исключение, чем правило. Можно в новой теме сделать ссылку на предыдущую. Или попросить открыть её модератором.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Январь 24, 2009, 22:46 »

Дата темы имхо говорит о том, что проблема до сих пор не была пофикшена (да, кути 4.4.3, а не 4.3.4 - перепутал).
Инклуды пытался местами менять - не помогает.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Dendy
Гость
« Ответ #8 : Январь 24, 2009, 22:51 »

Так это у вас в собственном коде, я правильно понял? Кют сама собирается нормально? Пример кода можно?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Январь 24, 2009, 23:50 »

код в общем такой:

Код
C++ (Qt)
bool MyForm::eventFilter(QObject *obj, QEvent *event)
{
   switch (event->type())
   {
       case 8: // QEvent::FocusIn:
           break;
 
     case 6: // QEvent::KeyPress:
       break;
 
       case 7: // QEvent::KeyRelease:
         break;
 
       default:;
   }
 
 
   // standard event processing
   return QWidget::eventFilter(obj, event);
}
 
 

Этот свитч компилируется только с закоменченными кодами эвентов.

Вообще после гугления понял, что у многих такая лажа и это как то связано с конфликтами с NetWM. Правда, решение предлагают только одно - как собственно и сделано у меня Грустный
« Последнее редактирование: Январь 24, 2009, 23:53 от pastor » Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Январь 25, 2009, 00:00 »

Проблема 100% в приложении. Была уже такая ошибка но с учаснием мотифа. Помогла перестановка инклудов: все кутишные инклуды были поставлены первыми, затем мотифа. Если проект большой, то это давольно кропотливая работа, т.к. проблемное место может находится далеко от файла с ошибкой.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Dendy
Гость
« Ответ #11 : Январь 25, 2009, 00:39 »

2 Racheengel

Да, сам напарывался на эти грабли в прошлом. Вот только уже не припомню что именно я инклудил и как решал.
Я вас обманул, заголовочник Qt (например, #include <qtglobal.h>) должен идти самым первым, вот что он содержит в итоге:

qt_x11_p.h
Код
C++ (Qt)
#if defined(_XLIB_H_) // crude hack, but...
#error "cannot include <X11/Xlib.h> before this file"
#endif
 
...
 
// rename a couple of X defines to get rid of name clashes
// resolve the conflict between X11's FocusIn and QEvent::FocusIn
enum {
   XFocusOut = FocusOut,
   XFocusIn = FocusIn,
   XKeyPress = KeyPress,
   XKeyRelease = KeyRelease,
   XNone = None,
   XRevertToParent = RevertToParent,
   XGrayScale = GrayScale,
   XCursorShape = CursorShape
};
#undef FocusOut
#undef FocusIn
#undef KeyPress
#undef KeyRelease
#undef None
#undef RevertToParent
#undef GrayScale
#undef CursorShape
 

Он инклудит Xlib.h первым, тем самым предотвращая его препроцессинг при включении в собственном коде из-за ограждающих дефайнов.
После этого он андефит горе-макросы, делая им замену в виде перечисления, если в собственном коде нужно будет их использовать.
« Последнее редактирование: Январь 25, 2009, 02:21 от Dendy » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Январь 25, 2009, 02:11 »

хм, судя по всему - можно попробовать просто заандефить макросы и потом уже заинклудить QtGui...
надо будет попробовать, спасибо за наводку.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #13 : Январь 25, 2009, 03:17 »

достаточно X заголовки включать после Qt-шных. NetWM тут наверное всё-таки ни при чём Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #14 : Январь 31, 2009, 02:35 »

не, не помогает...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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