Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Anarion от Сентябрь 18, 2015, 09:36



Название: Completer для плагина TextEditor для Qt Creator
Отправлено: Anarion от Сентябрь 18, 2015, 09:36
Здравствуйте.

Пока опишу вопрос без кода, на уровне теории. Есть желание использовать Qt Creator для редактирования НЕ C++ кода. Поставляемый с креатором плагин TextEditor вполне устраивает, но нужны некоторые дополнения, например QCompleter. Пробовал посредством своего плагина реализовать аналогично примеру http://doc.qt.io/qt-5/qtwidgets-tools-customcompleter-example.html, но возникла проблема: при клике на элементе текст вставляется нормально в виджет с текстом, но, если выбирать элемент кнопками enter/return, таб, которые, если правильно понимаю, определены в исходниках комлитера:
Код:
bool QCompleter::eventFilter(QObject *o, QEvent *e)
{
    ....
        case Qt::Key_Return:
        case Qt::Key_Enter:
        case Qt::Key_Tab:
            d->popup->hide();
            if (curIndex.isValid())
                d->_q_complete(curIndex);
            break;
    ....
        return true;
    ....
}
то помимо выбранного текста вставляется также и перенос строки(если выбирать кнопкой Enter/Return), что очень мешает. Каким образом он туда попадает не удалось выяснить.
Остальную же логику комлитера хотел сделать через installEventFilter для виджета с текстом, чтобы не изменять исходники самого плагина TextEditor. Но, видимо, данный способ вообще неправильный.
Изначально была идея унаследоваться от самого реализованного в плагине виджета для редактирования TextEditor::TextEditorWidget и переопределить события там, но есть сомнения, что это получится сделать, учитывая, какие там связи внутри самого плагина. Очень не хотелось бы реализовать сам редактор с нуля, поскольку в существующем редакторе есть нужная мне подсветка синтаксиса по xml файлу определения. Помимо комплитера, планируется добавить ComboBox для перехода между функциями/процедурами.

Поэтому вопрос такой: подскажите, пожалуйста, каким образом лучше сделать такой комплитер? И возможно ли вообще...