展开游标长度QLineEdit?

问题描述 投票:1回答:1

我想采取正常的QLineEdit,并改变光标的形状。所以使用像这样的子类:

class myLineEdit : public QLineEdit
{
    Q_OBJECT
signals:

public:
    explicit myLineEdit(QWidget * parent = 0)
    {

    }

protected:

};

并使光标像几个像素一样宽,就像Linux终端一样。默认情况下,指示文本位置的光标非常小。

我想我需要在paintevent()中覆盖一些东西?什么在paintevent究竟负责绘制单像素闪烁线QLineEdit()默认为?我在文档中找不到这些信息。

c++ qt qt5 qlineedit
1个回答
0
投票

使用Qproxystyle:

#include <QtWidgets>

class LineEditStyle: public QProxyStyle
{
    Q_OBJECT
    Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
public:
    using QProxyStyle::QProxyStyle;
    int cursorWidth() const{
        if(m_cursor_width < 0)
            return baseStyle()->pixelMetric(PM_TextCursorWidth);
        return pixelMetric(PM_TextCursorWidth);
    }
    void setCursorWidth(int cursorWidth){
        m_cursor_width = cursorWidth;
    }
    int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override
    {
        if(metric == PM_TextCursorWidth)
            if(m_cursor_width > 0)
                return  m_cursor_width;
        return  QProxyStyle::pixelMetric(metric, option, widget);
    }
private:
    int m_cursor_width = -1;
};

class LineEdit: public QLineEdit
{
    Q_OBJECT
public:
    LineEdit(QWidget *parent = nullptr):
        QLineEdit(parent)
    {
        LineEditStyle *new_style = new LineEditStyle(style());
        new_style->setCursorWidth(10);
        setStyle(new_style);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    LineEdit w;
    w.show();
    return a.exec();
}
#include "main.moc"

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.