#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 и запускает таймер, который постепенно уменьшает размер шрифта с STARTSIZE до ENDSIZE.