Автоматическая настройка размера шрифта в Qlineedit - PullRequest
0 голосов
/ 17 марта 2019

Я хочу использовать QLineEdit в Qt5, чтобы сделать это:

Когда я использую функцию f() для установки определенного текста в QLineEdit объекте, я надеюсь, что через секунду размер шрифтатекст автоматически станет меньше.

Например:

QLineEdit* edit;

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

И я хочу, чтобы через некоторое время после использования f() размер шрифта текста "good" автоматически уменьшился бы.

Как это сделать?Большое спасибо!

1 Ответ

0 голосов
/ 19 марта 2019
#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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...