首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QTextEdit中禁用光标?

如何在QTextEdit中禁用光标?
EN

Stack Overflow用户
提问于 2019-03-06 18:24:25
回答 2查看 1.4K关注 0票数 7

我现在正在使用带有qt虚拟键盘的QTextEdit,并且我在使用QTextEdit时遇到了一个问题

我想在QTextEdit中禁用文本光标。我试着用

代码语言:javascript
复制
setCursorWidth(0);

文本光标确实消失了。但是当我使用阿拉伯语键盘时,上面会有一个小箭头在闪烁

如下所示:

有什么方法可以禁用那个闪烁的光标吗?非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2019-03-06 18:47:23

实际上,这是一个Qt bug,据here报道。作为一种解决办法,您可以让您的自定义类继承自QTextEdit并重新实现keyPressEvent事件:

代码语言:javascript
复制
class TextEdit : public QTextEdit
{
public:
    TextEdit(QWidget* parent = nullptr) : QTextEdit(parent) {
        setReadOnly(true);
    }
    void keyPressEvent(QKeyEvent* event) {
        setReadOnly(false);
        QTextEdit::keyPressEvent(event);
        setReadOnly(true);
    }
};

这也会以从右到左的语言隐藏光标。

票数 3
EN

Stack Overflow用户

发布于 2019-03-06 19:08:32

一个简单的解决方案是创建一个QProxyStyle,这样所有的小部件都会受到影响,而不需要继承该类。

代码语言:javascript
复制
#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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55020783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档