首页 > 解决方案 > Qlineedit中字体大小的自动调整

问题描述

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

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

例如:

QLineEdit* edit;

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

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

怎么做?非常感谢!

标签: c++qt

解决方案


#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。


推荐阅读