我正在研究Qtv5.2
我需要永久隐藏QLineEdit的闪烁光标(插入符号)。但同时,我希望QLineEdit是可编辑的(因此readOnly和/或设置可编辑的false对我来说不是一个选项)。
当QLineEdit处于焦点时,我已经在更改它的背景色,所以我将知道正在编辑哪个QLineEdit小部件。对于我的要求,光标(闪烁的文本光标)显示不应该在那里。
我尝试过styleSheets,但无法获得光标隐藏的( {color:transparent; text-shadow:0px 0px 0px black;} )
有人能告诉我怎么做到这一点吗?
发布于 2014-08-07 11:57:22
没有标准的方法可以这样做,但是您可以使用setReadOnly方法来隐藏游标。当您调用此方法时,它将禁用键的处理,因此需要强制处理。继承QLineEdit并重新实现keyPressEvent。
LineEdit::LineEdit(QWidget* parent)
: QLineEdit(parent)
{
setReadOnly(true);
}
void LineEdit::keyPressEvent(QKeyEvent* e)
{
setReadOnly(false);
__super::keyPressEvent(e);
setReadOnly(true);
}发布于 2014-08-07 12:14:39
作为解决办法,您可以创建一个单行QTextEdit,并通过setCursorWidth将光标的宽度设置为零。
对于单行QTextEdit,您应该子类QTextEdit并执行以下操作:
setTabChangesFocus(true)。QSizePolicy::Expanding,QSizePolicy::Fixed)keyPressEvent()以在命中Enter/Return时忽略事件sizeHint以根据字体返回大小。执行工作是:
#include <QTextEdit>
#include <QKeyEvent>
#include <QStyleOption>
#include <QApplication>
class TextEdit : public QTextEdit
{
public:
TextEdit()
{
setTabChangesFocus(true);
setWordWrapMode(QTextOption::NoWrap);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
setFixedHeight(sizeHint().height());
}
void keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
event->ignore();
else
QTextEdit::keyPressEvent(event);
}
QSize sizeHint() const
{
QFontMetrics fm(font());
int h = qMax(fm.height(), 14) + 4;
int w = fm.width(QLatin1Char('x')) * 17 + 4;
QStyleOptionFrameV2 opt;
opt.initFrom(this);
return (style()->sizeFromContents(QStyle::CT_LineEdit, &opt, QSize(w, h).
expandedTo(QApplication::globalStrut()), this));
}
};现在您可以创建一个TextEdit实例,并将光标宽度设置为零:
textEdit->setCursorWidth(0);发布于 2021-05-26 16:41:34
我发现的最直接的东西是从这个github回购公司偷来的:https://github.com/igogo/qt5noblink/blob/master/qt5noblink.cpp
基本上,你只是想禁用内部的“眨眼计时器”Qt认为是好的UX (提示闪烁光标从来不是好的UX和永远不会-也许尝试颜色或高亮那里,呃设计窥视)。
所以代码非常简单:
from PyQt5 import QtGui
app = QtGui.QApplication.instance()
app.setCursorFlashTime(0)哇哦。
https://stackoverflow.com/questions/25180628
复制相似问题