如何在QTextEdit中禁用光标?

时间:2019-03-06 10:24:25

标签: c++ qt qtextedit

我现在将QTextEdit与qt虚拟键盘一起使用,并且遇到QTextEdit问题

我想在QTextEdit中禁用textcursor。我尝试使用

setCursorWidth(0);

textcursor确实消失了。但是当我使用阿拉伯语键盘时,那里会有一个小箭头闪烁

像这样:

enter image description here

有什么办法可以禁用该闪烁的光标? 非常感谢!

2 个答案:

答案 0 :(得分:3)

实际上,这是一个Qt错误,报告为here。作为解决方法,您可以让您的自定义类继承自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 :(得分:1)

一个简单的解决方案是创建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();
}