crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Горячая клавиша поиска в QTableView
Ponter
  опции профиля:
сообщение 14.2.2013, 13:00
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 4.3.2010
Пользователь №: 1504

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




Репутация:   0  


Есть таблица, унаследованная от QTableView. Переопределил метод keyPressEvent. Пытаюсь отловить комбинацию Ctrl+F. И никак. Пробовал разные варианты:
1) (e->key() == Qt::Key_F) && (e->modifiers() & Qt::ControlModifier)
2) e->matches(QKeySequence::Find)
Причем другие клавиши и комбинации с Ctrl он без проблем перехватывает, например Ctrl+C.
Что не так и как мне добиться решения?
Спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.2.2013, 14:40
Сообщение #2


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

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

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




Репутация:   34  


а в родительских окнах сочетание не ловится нигде ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 14.2.2013, 14:42
Сообщение #3


Старейший участник
****

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

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




Репутация:   8  


Если он перехватывает другие, но не перехватывает этот, значит кто то выше по иерархии съел событие.
Можно попробовать отловить событие на более высоком уровне.

Оба приведенных варианта у меня успешно работают.
Покажите минимально компилируемый пример, который демострирует проблему.

Сообщение отредактировал lanz - 14.2.2013, 14:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Ponter
  опции профиля:
сообщение 15.2.2013, 15:01
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 4.3.2010
Пользователь №: 1504

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




Репутация:   0  


class FindTable : public QTableView
{
    Q_OBJECT
    public:
        FindTable(QWidget *parent = 0);
        ~FindTable();

    protected:
        void keyPressEvent(QKeyEvent *event);
};


FindTable::FindTable(QWidget *parent) : QTableView(parent)
{
    _lblSearch = new QLabel(this);
    _lblSearch->move(5, 5);
    _lblSearch->setStyleSheet("QLabel { background-color : white; color : blue; }");
    _lblSearch->hide();

    _findDlg = new FindDialog(this);

    connect(this, SIGNAL(clicked(const QModelIndex &)),
            this, SLOT(slIndexChanged()));
}

FindTable::~FindTable()
{    
}

void FindTable::keyPressEvent(QKeyEvent *e)
{
    if (e->modifiers() & Qt::CtrlModifier && e->key() == Qt::Key_F)
    {
        //todo
    }
    QTableView::keyPressEvent(e);
}


Вызов в конструкторе QMainWindow, используется QSqlQueryModel и ui->table->setModel();


То что в конструкторе не обращайте внимания: забыл удалить
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 18.2.2013, 8:19
Сообщение #5


Старейший участник
****

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

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




Репутация:   8  


В том что вы запостили все в порядке. Проблема не тут, именно поэтому я попросил вас прикрепить компилируемый проект, который повторяет проблему.

Прикрепляю проект, который у меня работает и отлавливает и Ctrl+F и Find.
Попробуйте его запустить.
Прикрепленные файлы
Прикрепленный файл  scratch.zip ( 2,15 килобайт ) Кол-во скачиваний: 111
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Ponter
  опции профиля:
сообщение 19.2.2013, 18:08
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 4.3.2010
Пользователь №: 1504

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




Репутация:   0  


Спасибо, помогло. Оказывается родительский виджет перехватывает это нажатие. Проект делался давно, поэтому все нюансы были забыты...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.11.2024, 11:39