KeyPressEvent не работает с библиотекой Qscintilla (Qt)

РЕДАКТИРОВАТЬ: КОД является правильным кодом, для более подробного ознакомления с комментариями;)

Я пытаюсь сделать автозаполнение для скобок с библиотекой Qt и Qscintilla, но я не знаю почему, моя программа не перейдет в функцию keyPressEvent.

#include "mainwindow.h"#include <QMenuBar>
#include <QFileDialog>
#include <Qsci/qscilexerhtml.h>

#include <QKeyEvent>
#include <QTextEdit>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
initializeUI();
initializeEditor();

editor->installEventFilter(this);
}

MainWindow::~MainWindow()
{

}

void MainWindow::initializeUI()
{
setWindowTitle("My Code Editor");
setMenuBar(new QMenuBar(this));
QMenu *fileMenu = menuBar()->addMenu("&File");
fileMenu->addAction("&Open", this, SLOT(onOpen()), QKeySequence::Open);
editor = new QsciScintilla(this);
setCentralWidget(editor);
}

void MainWindow::onOpen()
{
QString filename =  QFileDialog::getOpenFileName(this, tr("Open .html file"),
QDir::currentPath(),
"HTML (*.html *.css *.php)");

if (filename.isEmpty())
return;

QFile file(filename);
if (!file.open(QIODevice::ReadOnly))
return;

editor->setText(file.readAll());
file.close();
}

void MainWindow::initializeEditor()
{
initializeFont();
initializeMargin();
initializeCaretLine();
initializeLexer();

initializeFolding();
}

void MainWindow::initializeFont()
{
QFont font("Consolas", 12);
font.setFixedPitch(true);
editor->setFont(font);
}

void MainWindow::initializeMargin()
{
QFontMetrics fontmetrics = QFontMetrics(editor->font());
editor->setMarginsFont(editor->font());
editor->setMarginWidth(0, fontmetrics.width(QString::number(editor->lines())) + 6);
editor->setMarginLineNumbers(0, false);
editor->setMarginsBackgroundColor(QColor("#cccccc"));

connect(editor, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
}

void MainWindow::onTextChanged()
{
QFontMetrics fontmetrics = editor->fontMetrics();
editor->setMarginWidth(0, fontmetrics.width(QString::number(editor->lines())) + 6);
}

void MainWindow::initializeLexer()
{
QsciLexerHTML *lexer = new QsciLexerHTML();
lexer->setDefaultFont(editor->font());
//lexer->setFoldComments(true);
editor->setLexer(lexer);
}

void MainWindow::initializeCaretLine()
{
editor->setCaretLineVisible(true);
editor->setCaretLineBackgroundColor(QColor("#ffe4e4"));
}

void MainWindow::initializeFolding()
{
QsciScintilla::FoldStyle state = static_cast<QsciScintilla::FoldStyle>((!editor->folding()) * 5);

if (!state)
editor->foldAll(false);

editor->setFolding(state);
}bool MainWindow::eventFilter(QObject *obj, QEvent *e)
{
if(e->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);

switch (keyEvent->key()) {
case 40:
editor->insert("()");
break;
case 60:
editor->insert("<>");
break;
default:
return QObject::eventFilter(obj, e);
}

return true;
}

return QObject::eventFilter(obj, e);
}

И есть мой заголовочный файл:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <Qsci/qsciscintilla.h>
#include <QTextEdit>
#include <QString>
#include <map>

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void initializeUI();
void initializeEditor();
void initializeLexer();
void initializeFolding();
void initializeMargin();
void initializeCaretLine();
void initializeFont();

protected:
bool eventFilter(QObject *obj, QEvent *e);

public slots:
void onTextChanged();
void onOpen();

private:
QsciScintilla *editor;
};

#endif // MAINWINDOW_H

Когда я использую функцию keyPressEvent без библиотеки Qscintilla, которая работает нормально, но не здесь.

Если кто-то может мне помочь, это будет приятно 🙂

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]