Как отключить курсор в QTextEdit? - PullRequest
7 голосов
/ 06 марта 2019

Я сейчас использую QTextEdit с виртуальной клавиатурой qt, и у меня возникла проблема с QTextEdit

Я хочу отключить текстовый курсор в QTextEdit.Я пытался использовать

setCursorWidth(0);

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

, например:

enter image description here

Есть ли способ отключить этот мигающий курсор?Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 06 марта 2019

На самом деле это ошибка Qt, о которой сообщается здесь .В качестве обходного пути вы можете использовать свой собственный класс, который наследует от QTextEdit и повторно реализовать событие keyPressEvent:

class TextEdit : public QTextEdit
{
public:
    TextEdit(QWidget* parent = nullptr) : QTextEdit(parent) {
        setReadOnly(true);
    }
    void keyPressEvent(QKeyEvent* event) {
        setReadOnly(false);
        QTextEdit::keyPressEvent(event);
        setReadOnly(true);
    }
};

Это также скроет курсор на языках справа налево.

1 голос
/ 06 марта 2019

Простым решением является создание QProxyStyle, поэтому все виджеты будут затронуты без необходимости наследования от этого класса.

#include <QtWidgets>

class CursorStyle: public QProxyStyle
{
public:
    using QProxyStyle::QProxyStyle;
    int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
    {
        if(metric == PM_TextCursorWidth)
            return 0;
        return  QProxyStyle::pixelMetric(metric, option, widget);
    }
};


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    CursorStyle *style = new CursorStyle(a.style());
    a.setStyle(style);
    QWidget w;
    QVBoxLayout *lay = new QVBoxLayout(&w);
    lay->addWidget(new QLineEdit);
    lay->addWidget(new QTextEdit);
    w.show();
    return a.exec();
}
...