我现在正在使用带有qt虚拟键盘的QTextEdit,并且我在使用QTextEdit时遇到了一个问题
我想在QTextEdit中禁用文本光标。我试着用
setCursorWidth(0);文本光标确实消失了。但是当我使用阿拉伯语键盘时,上面会有一个小箭头在闪烁
如下所示:

有什么方法可以禁用那个闪烁的光标吗?非常感谢!
发布于 2019-03-06 18:47:23
实际上,这是一个Qt bug,据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);
}
};这也会以从右到左的语言隐藏光标。
发布于 2019-03-06 19:08:32
一个简单的解决方案是创建一个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();
}https://stackoverflow.com/questions/55020783
复制相似问题