【问题标题】:how to notify that the maxlength is overflowing如何通知 maxlength 溢出
【发布时间】:2018-12-09 18:55:12
【问题描述】:

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

GTK+ 有 connect_before()、connect() 和 connect_after()。 Qt中是否有类似的东西?

【问题讨论】:

  • 不,这在 Qt 中不存在。
  • 我想你有一个XY problem,你的主要目标是什么?
  • @eyllanesc,我想我在问题中解释得很清楚 - 我正在寻找一种方法来通知用户他键入的字符会使文本长度超过最大限制。我正在寻找一种在 QT_VERSION
  • @Igor 对不起,但如果我不明白,那么我必须问。你想要一个在字符数超过最大长度时发出的信号吗?
  • @eyllanesc,正确。它必须适用于 qt 5.11 或更低版本。

标签: c++ qt qlineedit qt-signals


【解决方案1】:

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

【讨论】:

  • 它有效。代码可以用 5.12 中的特殊信号编写,但我还没有。谢谢。
  • @Igor 编辑您的问题,使其与我的答案有更多关系,例如:如何通知 maxlength 溢出? :-)
  • 这个问题更广泛 - 如何在 Qt 中执行默认信号处理程序之前的信号处理程序。但我们开始讨论这个具体问题。现在我是否正确理解一般问题没有通用解决方案? ;-)
  • @Igor 因此,如果您意识到我的解决方案是基于 cmets 而不是您的问题本身,我请您对其进行调整,以免将来的读者感到困惑。 :-)
  • 好吧,是你的错,我们进行了详细讨论。 ;-) 但我编辑了这个问题。
猜你喜欢
  • 1970-01-01
  • 2011-02-17
  • 2014-03-16
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多