Название: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: aviabunin от Октябрь 08, 2011, 16:48 Есть класс таблицы, унаследованный от QTableWidget. В нем - переменная mode.
Код: #include <QTableWidget> Код: iSticks::iSticks(QWidget *parent) : Код: int mode; При выполнении получаю ошибку Код: ошибка: invalid conversion from 'QObject*' to 'QWidget*' Спасибо за любую подсказку или ссылку. PS. Как лучше передать свойства главного класса в обработчик событий? Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: lit-uriy от Октябрь 08, 2011, 17:07 используй приведение типов Си++, вместо Си. А ещё лучше Qt:
qobject_cast<QWidget*>(parent) Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: aviabunin от Октябрь 08, 2011, 17:58 Сделал так:
Код: myTable tableWidget; Код: ошибка: no match for 'operator=' in 'tableWidget = qobject_cast<myTable>' 2. Как можно еще получить доступ к переменным главного модуля? или к переменным parent - но для этого нужно преобразовать QObject к своему типу myTable, в котором введены переменные параметры. Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: Kolobok от Октябрь 08, 2011, 18:23 tableWidget это объект, а parent - указатель.
Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: iroln от Октябрь 08, 2011, 18:28 Я не очень понимаю, зачем вы тут всё это наворотили. :)
Получить доступ к переменным вашего "главного модуля" можно в методе класса этого самого главного модуля. :) Виртуальный метод eventFilter есть в каждом классе, наследуемом от QObject. Это любой виджет. Не обязательно создавать для этого отдельный класс фильтра. Определите метод eventFilter в своём классе "главного модуля" вот и всё. В этом методе будут доступны все данные класса. :) Цитировать преобразовать QObject к своему типу myTable, в котором введены переменные параметры. ??? ::)Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: aviabunin от Октябрь 08, 2011, 21:19 1. Метод eventFilter() определил. А как сделать, чтобы он заработал. Чем заменить строку:
Код: // ui->tableWidget->installEventFilter(new ev_filter(ui->tableWidget)); Код: this->installEventFiter... 2.Такое преобразование работает Код: tableWidget = (myTable *)parent; Код: tableWidget = qobject_cast<myTable *>parent; Спасибо! Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: aviabunin от Октябрь 08, 2011, 21:34 Если не ошибся записал так:
Код: this->installEventFilter(this); Код: bool iSticks::eventFilter(QObject* pobj, QEvent* pe) Код: ошибка: invalid use of incomplete type 'struct QKeyEvent' Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: iroln от Октябрь 08, 2011, 21:44 Должно быть вот так:
Код: // это делается в конструкторе класса главной формы приложения (iSticks видимо) Ошибку выдаёт вот это? Код
Зачем это вообще делать? Сначала проверяете, что событие имеет тип KeyPress и этого достаточно. Дальше просто пишите: Код
Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: kambala от Октябрь 08, 2011, 21:47 Цитировать ошибка: invalid use of incomplete type 'struct QKeyEvent' допиши #include <QKeyEvent>. ииспользуй приведение типов Си++, вместо Си. Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: iroln от Октябрь 08, 2011, 21:51 используй приведение типов Си++, вместо Си. Да не надо тут типы приводить, зачем? Событие уже нужного типа.Хотя возможно нужно (расслабился я с питонами), но надо использовать static_cast. Код
Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: aviabunin от Октябрь 08, 2011, 22:13 Теперь почему то через строку
Код: if(pe->type() != QEvent::KeyPress) return false; // Ловим только событие "keyPress" То проходит. А когда в отдельном классе было - таких проблем не было. ? Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: aviabunin от Октябрь 08, 2011, 22:17 Весь обработчик:
Код: bool iSticks::eventFilter(QObject* pobj, QEvent* pe) Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: kambala от Октябрь 08, 2011, 22:30 Хотя возможно нужно (расслабился я с питонами), но надо использовать static_cast. а я его и имел в видуесли нажимать стрелки или пробел - не проходит. А если скажем - обычный символ типа "a" ... ну так посмотри какой там тип события при стрелках и пробеле. хотя странно, что не QEvent::KeyPress...Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: aviabunin от Октябрь 08, 2011, 23:04 1. В отдельном классе работало.
2. В отладчике - пишет , что pe - QEvent pe->type() no such value. На всякий случай посылаю код (продолжать уже завтра буду) Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: iroln от Октябрь 08, 2011, 23:10 Отдельный класс тут не при чём. Вы что-то не так делаете.
Вот я только что написал простейший пример (myform.h файл опускаю): Код
Реагирует на нажатие всех кнопок клавиатуры. Название: Re: Ошибка преобразования QObject в QWidget. Передача свойств в обработчик событий Отправлено: aviabunin от Октябрь 09, 2011, 07:15 Спасибо, огромное!
Поставил Код: ui->tableWidget->installEventFilter(this); Код: this->installEventFilter(this); |