crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

aviabunin
  опции профиля:
сообщение 8.10.2011, 16:50
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 31.7.2011
Пользователь №: 2773

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть класс таблицы, унаследованный от QTableWidget. В нем - переменная mode.
#include <QTableWidget>
class myTable : public QTableWidget
{
    Q_OBJECT
public:
    myTable(QWidget *parent = 0);
    int mode;
};

Из основного класса создаю фильтр событий

iSticks::iSticks(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::iSticks)
{
    ui->setupUi(this);

    ui->tableWidget->installEventFilter(new ev_filter(ui->tableWidget));
...
}

В обработчике событий пытаюсь получить значение mode
int mode;
ev_filter::ev_filter(QObject *parent) :
    QObject(parent)
{
    mode = ((myTable)parent).mode;
}


При выполнении получаю ошибку
ошибка: invalid conversion from 'QObject*' to 'QWidget*'

В чем может быть дело?
Спасибо за любую подсказку или ссылку.
PS. Как лучше передать свойства главного класса в обработчик событий?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
aviabunin
  опции профиля:
сообщение 8.10.2011, 22:37
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 31.7.2011
Пользователь №: 2773

Спасибо сказали: 0 раз(а)




Репутация:   0  


MyTable и создается в главном классе, обработчик eventFilter _ я создавал в отдельном классе, как в книжке. Сейчас перенес обработчик тоже в главный класс, но почему то код в главном классе работает несколько иначе.
Вот код главного класса.
Почему то в обработчике через строку
    if(pe->type() != QEvent::KeyPress) return false;  //  Ловим только событие "keyPress"

не проходит при нажатии клавиш - стрелок, пробела. А если обычный символ , то проходит.

#include "isticks.h"
#include "ui_isticks.h"
#include <QDebug>
#include <QObject>

 #include <QKeyEvent>




int fig1[5][5] = {{00100},{01110},{11111},{01110},{00100}};          // матрица, задающая фигуру 1
//ev_filter filter;


iSticks::iSticks(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::iSticks)
{
    ui->setupUi(this);
//
    this->mode=1;
    this->installEventFilter(this);
//    ui->tableWidget->installEventFilter(new ev_filter(ui->tableWidget));

    wgt = new qpaintwidget(ui->tableWidget);
    wgt->update();
}

iSticks::~iSticks()
{

 //   wgt->deleteLater();    // подчищаем
    delete ui;
}
bool iSticks::eventFilter(QObject* pobj, QEvent* pe)
{

    
    qDebug()<<"0";
    if(pe->type() != QEvent::KeyPress) return false;  //  Ловим только событие "keyPress"


    qDebug()<<"1";

    if(((QKeyEvent*)pe)->key()==Qt::Key_Space){ // если пробел - переключаем режим стрелок
        qDebug()<<"1";
        this->mode ^= 1;
        return true;
    }

    if(this->mode == 0) return false; // Если режим перемещения - будет работать функционал таблицы.

    return true;
}

В чем может быть дело?
Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 21.6.2025, 7:25