在Qlineedit中自动调整字体大小

时间:2019-03-17 12:58:25

标签: c++ qt

我想在Qt5中使用QLineEdit来做到这一点:

当我使用函数f()QLineEdit对象中设置特定文本时,希望一秒钟后文本的字体大小会自动变小。

例如:

QLineEdit* edit;

void f()
{
    edit->setText("good");
}  

我想在使用f()之后的一段时间内,文本"good"的字体大小会自动变小。

该怎么做?非常感谢你!

1 个答案:

答案 0 :(得分:0)

#ifndef OWNTEXTEDIT_H
#define OWNTEXTEDIT_H

#include <qlineedit.h>
#include <qtimer.h>

#define STARTSIZE 30
#define SPEED 50
#define ENDSIZE 15

class OwnTextEdit : public QLineEdit {
    Q_OBJECT

public slots:
    void setText(const QString& text) {
        QLineEdit::setText(text);
        m_timer->start(SPEED);
        m_size = STARTSIZE;
        setFont(QFont(font_name, m_size));
    }

public:
    OwnTextEdit(QWidget *parent = 0) {
        setMinimumSize(QSize(500, 100));

        m_timer = new QTimer(this);
        QObject::connect(m_timer, &QTimer::timeout, this, &OwnTextEdit::decreaseSize);
    };

    ~OwnTextEdit() {};

private slots:
    void decreaseSize() {
        if (m_size == ENDSIZE) m_timer->stop();

        m_size--;
        setFont(QFont(font_name, m_size));
    };

private:    
    QTimer* m_timer;
    unsigned int m_size = STARTSIZE;
    const char* font_name = "Arial";
};

#endif // OWNTEXTEDIT_H

这是我在这里的第一个评论。希望我能理解您的问题。 如果您打算突然更改fontSize,则应该可以轻松更改其行为。

我继承了QLineEdit。 我重写的方法setText调用QLineEdit :: setText并启动Timer,该计时器将字体大小从STARTSIZE逐渐减小到ENDSIZE。