как сообщить, что максимальная длина переполнена - PullRequest
0 голосов
/ 09 декабря 2018

Есть ли способ подключить сигнал перед выполнением обработчика по умолчанию?Я ищу способ выполнить свою функцию до сигнала QLineEdit :: textChanged, чтобы выполнить уведомление о пределе максимальной длины.

GTK + имеет connect_before (), connect () и connect_after ().Есть ли что-то похожее в Qt?

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете использовать метод keyPressEvent для выдачи пользовательского сигнала.

#include <QtWidgets>

class LineEdit: public QLineEdit
{
    Q_OBJECT
public:
    using QLineEdit::QLineEdit;
signals:
    void maxLengthSignal();
protected:
    void keyPressEvent(QKeyEvent *event) override{
        if(!event->text().isEmpty() && maxLength() == text().length())
            emit maxLengthSignal();
        QLineEdit::keyPressEvent(event);
    }
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    LineEdit w;
    QObject::connect(&w, &QLineEdit::textEdited, [](const QString & text){
        qDebug()<< text;
    });
    QObject::connect(&w, &LineEdit::maxLengthSignal, [](){
        qDebug()<< "maxLength signal";
    });
    w.setMaxLength(10);
    w.show();
    return a.exec();
}
#include "main.moc"
...