我现在正在使用带有Qt虚拟键盘的QTextEdit,并且我在QTextEdit中遇到了一个问题
我想禁用QTextEdit中的文本光标。 我尝试使用
setCursorWidth(0);
文本光标消失了。但是当我使用阿拉伯语键盘时,那里会有一个小箭头在闪烁
就像这样:
有没有办法禁用闪烁的光标呢? 非常感谢!
实际上这是一个Qt的bug,已在这里报告。作为解决方法,您可以创建一个继承自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);
}
};
这也将隐藏从右到左书写语言中的光标。
#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();
}
setCursorWidth(0)
做了类似的事情?(if(metric == PM_TextCursorWidth) return 0;
) 然而,即使使用这个方法,我仍然可以看到闪烁的箭头。顺便说一下,我正在使用 Qt 虚拟键盘输入阿拉伯语,而不是笔记本电脑/计算机上的硬件键盘。 - tako