Название: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Апрель 30, 2011, 18:56 И вновь мои надоедливые вопросики.
Пишу свой виджет, структура получается такая: Код ну и в третьем классе я пытаюсь реализовать отслеживание нажатия кнопочки: Код ну и сама реализация keyPressEvent: Код ну и естественно, как вы наверное уже догадались, ОНИ НЕ РАБОТАЮТ!!! Даже дебаггер не ловит их. В чем может быть траБЛЯ? Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Апрель 30, 2011, 21:33 А фокус ввода установлен во время нажатия клавиш?
Название: Re: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Май 01, 2011, 00:43 Эмммм...... хорошо, допустим я установил фокус на этот виджет. Но при добавлении еще одного поля Position на общую форму Track у меня, получается, будут генериться два фокуса одновременно или я ошибаюсь?
Да и еще один вопрос, как переопределить нажатие клапиш во вложенных в этот виджет стд. классов QLineEdit, т.е. чтобы во время добавления своих ноток можно было бы менять размерность клавишами + - ? Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Май 01, 2011, 08:53 Это кусок твоего кода Это вы неправильно сказали!Цитировать public: // Конструктор explicit Position( QWidget *this_track_transfered, ............ void keyPressEvent(QKeyEvent *event); у тебя слот keyPressevent определен в секции паблик это из справки: Код: void QWidget::keyPressEvent ( QKeyEvent * event ) [virtual protected] тут четко написано что эта функция виртуальная защищенная. По-этому оределять ее надо в секции protected: а ты просто сделал новую функцию котороя никакого отношения к переопределению нажатия клавиш не имеет. Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Май 01, 2011, 09:01 Эмммм...... хорошо, допустим я установил фокус на этот виджет. Но при добавлении еще одного поля Position на общую форму Track у меня, получается, будут генериться два фокуса одновременно или я ошибаюсь? Вы можете обрабатывать нажатия в одном месте. См. void QObject::installEventFilter ( QObject * filterObj ).Да и еще один вопрос, как переопределить нажатие клапиш во вложенных в этот виджет стд. классов QLineEdit, т.е. чтобы во время добавления своих ноток можно было бы менять размерность клавишами + - ? Опять же можно использовать QObject::installEventFilter ( QObject * filterObj ).Название: Re: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Май 01, 2011, 18:36 Спасибо приогромное. Помогло. Теперь столкнулся с другой проблемой)
Забиндил клавишу P, но когда стоит русская раскладка, то меня посылают в места не столь отдаленные, эта проблема обходима? Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Май 01, 2011, 19:59 А вам что надо? Чтобы при любой раскладке клавы отрабатвал один и тот же блок?
Название: Re: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Май 01, 2011, 20:26 Да, именно оно.
Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Май 01, 2011, 20:36 Возможно это не совсем изящно, но можно смотреть текст евента, QString QKeyEvent::text () const.
Название: Re: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Май 02, 2011, 01:35 Сэнкс биг. Тут что, дают ответы на все вопросы?)
Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Май 02, 2011, 15:20 Сэнкс биг. Тут что, дают ответы на все вопросы?) Ну это же форум ;) Я так понмаю, что вы дклаете что-то типа редкатора? Тогда лучше использовать каркас QGraphics... Если хотите виджет воткнуть, то есть класс QGraphicsProxyWidget.Название: Re: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Май 02, 2011, 15:29 Хорошо, а при написании Плугина, все отлично прокатит, т.е. мне нужно будет это все в дизайнер добавить еще.
Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Май 02, 2011, 20:03 Зачем плагин? Можно проще через Promote to...
Название: Re: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Май 03, 2011, 03:49 Что-то несовсем я понял возможности QGraphicsProxyWidget. Не могли бы пояснить?
Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Май 03, 2011, 08:31 Есть сцена, на сцене есть куча айтемов (можно унаследоваться от QGraphicsItem и рисовать что угодно), а также можно на сцену добавлять обычные виджеты через QGraphicsProxyWidget.
Название: Re: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Май 03, 2011, 17:54 Хорошо, а что с интеграцией в Дизайнер. Я так понимаю, что мой самый главный класс должен наследоваться от QWidget, тогда как преобразовать сцену или сам вид в QWidget? Или можно унаследовать основной класс от QGraphicsScene и потом уже интегрировать его в Дизайнер?
Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Май 03, 2011, 23:41 На сцену добавляешь айтемы, а сцену устанавиваешь для вью QGraphicsView (наследник от QWidget) методом void QGraphicsView::setScene ( QGraphicsScene * scene ).
Название: Re: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Май 04, 2011, 00:44 Сэнкс, не помогло. Походу придется сушить весла, т.к. эта трабла,с отображением виджетов, ставит в ступор. ОНИ ТУПО НЕ ОТОБРАЖАЮТСЯ, как ни крути(
Название: Re: keyPressEvent не ловятся клавиши Отправлено: alexman от Май 04, 2011, 08:17 Посмотрел бы примеры в папке 'qtdir\examples\graphicsview\'.
Название: Re: keyPressEvent не ловятся клавиши Отправлено: TranE91 от Май 05, 2011, 04:30 Доброго времени суток. Спасибо за советы всем, проблема решена. Все гениальное просто. Оказывается, при реализации наследника виджета в стд. виджетах, составляющих наследника, нужно было всего-навсего добавить ф-ию ->SHOW();
З.Ы. убил себя об стенку( |