首页 文章

如何通知maxlength溢出

提问于
浏览
1

所有,

对不起,对于这样一个新手问题,但我是Qt的新手,所以

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

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

TIA!

1 回答

  • 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"
    

相关问题