Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Горячая клавиша поиска в QTableView
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
Ponter
Есть таблица, унаследованная от QTableView. Переопределил метод keyPressEvent. Пытаюсь отловить комбинацию Ctrl+F. И никак. Пробовал разные варианты:
1) (e->key() == Qt::Key_F) && (e->modifiers() & Qt::ControlModifier)
2) e->matches(QKeySequence::Find)
Причем другие клавиши и комбинации с Ctrl он без проблем перехватывает, например Ctrl+C.
Что не так и как мне добиться решения?
Спасибо
Алексей1153
а в родительских окнах сочетание не ловится нигде ?
lanz
Если он перехватывает другие, но не перехватывает этот, значит кто то выше по иерархии съел событие.
Можно попробовать отловить событие на более высоком уровне.

Оба приведенных варианта у меня успешно работают.
Покажите минимально компилируемый пример, который демострирует проблему.
Ponter
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
В том что вы запостили все в порядке. Проблема не тут, именно поэтому я попросил вас прикрепить компилируемый проект, который повторяет проблему.

Прикрепляю проект, который у меня работает и отлавливает и Ctrl+F и Find.
Попробуйте его запустить.
Ponter
Спасибо, помогло. Оказывается родительский виджет перехватывает это нажатие. Проект делался давно, поэтому все нюансы были забыты...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.