Расширить длину курсора QLineEdit? - PullRequest
0 голосов
/ 28 февраля 2019

Я хотел бы взять нормальный QLineEdit и изменить форму курсора.Итак, с подклассом, подобным так:

class myLineEdit : public QLineEdit
{
    Q_OBJECT
signals:

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

    }

protected:

};

И сделайте так, чтобы курсор был шириной в несколько пикселей, как у терминала Linux.По умолчанию курсор для обозначения позиции текста очень тонкий.

Я предполагаю, что мне нужно переопределить что-то в paintevent()?Что именно в paintevent будет отвечать за отрисовку однопиксельной мигающей линии QLineEdit() по умолчанию?Я не смог найти эту информацию в документации.

1 Ответ

0 голосов
/ 28 февраля 2019

Используйте 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

...