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. Как лучше передать свойства главного класса в обработчик событий?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 8.10.2011, 21:37
Сообщение #2


Активный участник
***

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

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




Репутация:   3  


А не проще в главном классе создать объект типа myTable и обращаться к его свойству mode. Или я неправильно понял вопрос.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
aviabunin
  опции профиля:
сообщение 8.10.2011, 22:37
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 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;
}

В чем может быть дело?
Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 9.10.2011, 10:56
Сообщение #4


Активный участник
***

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

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




Репутация:   3  


А если попробовать переопределить keyPressEvent в классе myTable?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 9.10.2011, 11:02
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Цитата
int mode;
ev_filter::ev_filter(QObject *parent) :
    QObject(parent)
{
    mode = ((myTable)parent).mode;
}


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


mode = ((myTable*)parent)->mode;

Сообщение отредактировал Алексей1153 - 9.10.2011, 11:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.10.2011, 12:00
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(Алексей1153 @ 9.10.2011, 14:02) *
mode = ((myTable*)parent)->mode;
тоже криво.
qobject_cast<myTable*>(parent)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 9.10.2011, 12:15
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2943
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Litkevich Yuriy, соглашусь только из-за того, что Qt :) А так - нормально
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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