我现在将QTextEdit与qt虚拟键盘一起使用,并且遇到QTextEdit问题
我想在QTextEdit中禁用textcursor。我尝试使用
setCursorWidth(0);
textcursor确实消失了。但是当我使用阿拉伯语键盘时,那里会有一个小箭头闪烁
像这样:
有什么办法可以禁用该闪烁的光标? 非常感谢!
答案 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();
}