如何通知maxlength溢出

时间:2018-12-09 18:55:12

标签: qt signals connect

全部

很抱歉,这样的新手问题,但是我是Qt中的新手,所以

在执行默认处理程序之前,是否可以连接信号?我正在寻找一种在QLineEdit :: textChanged信号之前执行我的函数的方法,以执行有关最大长度限制的通知。

GTK +具有connect_before(),connect()和connect_after()。 Qt中有类似的东西吗?

TIA!

1 个答案:

答案 0 :(得分:2)

您可以使用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"