坚持QtQML,坚持移动互联网

http://www.qtcn.org/bbs/u/121778  [收藏] [复制]

toby520

将QtCoding进行到底,做Qt的宠儿

  • 89

    关注

  • 162

    粉丝

  • 3567

    访客

  • 等级:精灵王
  • 身份:论坛版主
  • 总积分:1260
  • 男,1986-11-17

最后登录:2024-03-28

更多资料

日志

自定义QLineEdit的PlaceholderColor

2018-08-30 11:42
继承自QLineEdit,重写绘制
代码如下:
  1. #ifndef CUSTOMLINEEDIT_H
    #define CUSTOMLINEEDIT_H

    #include <QObject>
    #include <QLineEdit>
    #include <QPainter>
    #include <QDebug>

    class CustomLineedit : public QLineEdit
    {
        Q_OBJECT
        Q_PROPERTY(QColor placeholderColor READ customPlaceholderColor WRITE setCustomPlaceholderColor)

    public:
        explicit CustomLineedit(QWidget *parent = nullptr);

        void setCustomPlaceholderText(const QString &text) {
            this->mText = text;
            update();
        }
        const QString &customPlaceholderText() const { return mText; }

        void setCustomPlaceholderColor(const QColor &color) { this->color = color; }
        const QColor &customPlaceholderColor() const { return color; }
        void paintEvent(QPaintEvent *event) {
            QLineEdit::paintEvent(event);
            if (!hasFocus() &&  text().isEmpty() && !mText.isEmpty()) {
                // QLineEdit's own placeholder clashes with ours.
                Q_ASSERT(placeholderText().isEmpty());
                QPainter p(this);
                p.setPen(color);
                QFontMetrics fm = fontMetrics();
                int minLB = qMax(0, -fm.minLeftBearing());
                QRect lineRect = this->rect();
                QRect ph = lineRect.adjusted(minLB + 2, 0, 0, 0);
                QString elidedText = fm.elidedText(mText, Qt::ElideRight, ph.width());
                p.drawText(ph, Qt::AlignVCenter, elidedText);
            }
        }
    private:
        QString mText;
        QColor color;
    };

    #endif // CUSTOMLINEEDIT_H
主要来自于Stack Overflow

分类:默认分类|回复:0|浏览:776|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:03-29 17:26
©2005-2016 QTCN开发网 版权所有 Gzip disabled