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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: калькулятор  (Прочитано 22227 раз)
Bepec
Гость
« Ответ #15 : Май 08, 2013, 18:13 »

Тогда узнай же о великом и гениальном grabKeyboard().
Будучи вызванным у виджета, он будет перехватывать все без исключения нажатия клавиш.

Т.е. алгоритм - вызвать grabKeyboard() и установить фильтр тому же виджету.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #16 : Май 08, 2013, 19:18 »

нужно, чтобы нажатия клавиш перехватывались везде: и когда фокус на форме, и на кнопках, и на lineEdit, а больше там ничего нет.
Прогон всех событий приложения через this:
Код
C++ (Qt)
qApp->installEventFilter( this );
Записан

Qt 5.11/4.8.7 (X11/Win)
Alexu007
Гость
« Ответ #17 : Май 08, 2013, 19:41 »

Прогон всех событий приложения через this:
Код
C++ (Qt)
qApp->installEventFilter( this );
Я новичок в Qt и многого там не понимаю. Калькулятор был написан мной сперва в билдере, но я и там особо в детали не вдавался: получил обработчик прерывания кнопки и пиши туда код. А потом сделал примерно то же самое в Qt.

Прогон всех событий - это прекрасно. Судя по названию, это установка фильтра событий но куда его конкретно вставлять то?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #18 : Май 08, 2013, 19:51 »

в конструктор
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Alexu007
Гость
« Ответ #19 : Май 09, 2013, 01:03 »

Ругается на строчку:

Код
C++ (Qt)
QKeyEvent *keyEvent = qobject_cast <QKeyEvent *>(event);


ошибка: no matching function for call to 'qobject_cast(QEvent*&)'
Записан
Bepec
Гость
« Ответ #20 : Май 09, 2013, 08:59 »

Эт уже моя ошибка.
Там static_cast я использую Подмигивающий Извиняюсь.

PS наверно dynamic_cast тут будет вернее. Меня поправят, я думаю.
« Последнее редактирование: Май 09, 2013, 09:02 от Bepec » Записан
Alexu007
Гость
« Ответ #21 : Май 09, 2013, 14:26 »

Эт уже моя ошибка.
Там static_cast я использую Подмигивающий Извиняюсь.
PS наверно dynamic_cast тут будет вернее. Меня поправят, я думаю.
Ну, кто виноват - ясно. А чё делать то?
Записан
Bepec
Гость
« Ответ #22 : Май 09, 2013, 14:41 »

Маразм... Заменить qobject_cast на static_cast.
Записан
Alexu007
Гость
« Ответ #23 : Май 09, 2013, 16:30 »

Маразм... Заменить qobject_cast на static_cast.
Извините чайника.

QKeyEvent *keyEvent = qobject_cast <QKeyEvent *>(event);

Я понимаю, что мы создаём ссылку на класс (да?) и заполняем этот класс значениями с помощью функции qobject_cast <QKeyEvent *>(event);

Но что это за функция - за гранью моего понимания. Почему qobject_cast, почему <QKeyEvent *> в угловых скобках, зачем в конце (event)? Я не понимаю, и не понимаю, откуда эту информацию можно взять. Я порыл в справке класс QKeyEvent, но там нет ничего о том, как заполнять его данными. Только, как извлекать информацию, например keyEvent->text(), или keyEvent->key().
« Последнее редактирование: Май 09, 2013, 16:36 от Alexu007 » Записан
Alexu007
Гость
« Ответ #24 : Май 09, 2013, 16:35 »

  static_cast работает. dynamic_cast тоже работает. Статическое связывание и динамическое связывание - что это такое и в чём разница?
« Последнее редактирование: Май 09, 2013, 16:37 от Alexu007 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #25 : Май 09, 2013, 20:20 »

тут достаточно статик каста.

отличия кастов, а также что это такое в принципе, гуглятся с неимоверной лёгкостью, раз уж не столкнулся с этой темой во время изучения плюсов.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Alexu007
Гость
« Ответ #26 : Май 10, 2013, 10:13 »

Я не изучал плюсы. Посоветуйте хороший учебник по Qt.

Прога заработала, вот функция обработки клавиатуры:

Код
C++ (Qt)
//обработка прерываний клавиатуры
bool Widget::eventFilter(QObject *obj, QEvent *event)
   {
 
   if (event->type() == QEvent::KeyPress) // /*&& obj->objectName() == "Имя виджета"*/)
       {
       static int i;
 
       if (i != 0) {i = 0; return  QObject::eventFilter(obj, event);}
 
       QKeyEvent *keyEvent = static_cast <QKeyEvent *>(event);
 
       i = keyEvent->key();
 
       if ((i > 47) && (i < 58)  ) fnDigit(i - 48);    //цифры
 
       if (i == 43) fnAction(1);   //+
       if (i == 45) fnAction(2);   //-
       if (i == 42) fnAction(3);   //*
       if (i == 47) fnAction(4);   ///
 
       if (i == 16777220) Widget::MyEventHandler3();   //Enter
       if (i == 16777221) Widget::MyEventHandler3();   //Enter
 
       if (i == 16777216) Widget::MyEventHandler4();   //Esc = C
       if (i == 16777232) Widget::MyEventHandler4();   //Home = C
 
       if (i == 16777233) Widget::MyEventHandler5();   //End = SE
       if (i == 16777238) Widget::MyEventHandler6();   //PgUp = Sqrt
       if (i == 16777239) Widget::MyEventHandler7();   //PgDn = %
       if (i == 16777249) Widget::MyEventHandler9();   //Ctrl = +/-
 
       if (i == 46)       Widget::MyEventHandler8();   //"."
 
       //тут можно посмотреть коды клавиш
       //ui->lineEdit->setText(QString::number(i));
       }
 
   return  QObject::eventFilter(obj, event);
   }

И исходники с обработкой клавиш:
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #27 : Май 10, 2013, 13:43 »

Я не изучал плюсы. Посоветуйте хороший учебник по Qt.
пацан к успеху шел
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #28 : Май 10, 2013, 15:22 »

http://www.lektorium.tv/course/?id=22825 Основы C++, 1 семестр
http://www.lektorium.tv/course/?id=22858 Основы C++, 2 семестр

Лектор: Евгений Линский
Записан
Alexu007
Гость
« Ответ #29 : Май 12, 2013, 07:12 »

Прикрутил дополнительную фичу, так прикольней и даже удобнее. Работает и с мышкой и с клавиатурой. На этом работу над калькулятором прекращаю, дарю свой гениальный код благодарным потомкам:

« Последнее редактирование: Май 12, 2013, 07:16 от Alexu007 » Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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