Qt 将最大长度应用于QLineEdit

Qt 将最大长度应用于QLineEdit,qt,qlineedit,Qt,Qlineedit,全部, 在年,我得到了一个覆盖keyPressEvent的建议,以便通知QLineEdit的最大长度限制 然而,我相信如果我尝试使用Ctrl+V或上下文菜单从键盘粘贴文本,这将不起作用 在这种情况下,最好的方法是什么 再一次:我正在寻找一种方法来通知用户最大长度限制 蒂娅 5.12之前: 处理QLineEdit的textChanged信号 现在在插槽中,查找剪贴板文本。 如果两者相同,则这是一种粘贴操作。 然后验证您的长度。 下面是Soem psudo代码 void yourclass::lin

全部,

在年,我得到了一个覆盖keyPressEvent的建议,以便通知QLineEdit的最大长度限制

然而,我相信如果我尝试使用Ctrl+V或上下文菜单从键盘粘贴文本,这将不起作用

在这种情况下,最好的方法是什么

再一次:我正在寻找一种方法来通知用户最大长度限制

蒂娅

5.12之前:

处理QLineEdit的textChanged信号

现在在插槽中,查找剪贴板文本。 如果两者相同,则这是一种粘贴操作。 然后验证您的长度。 下面是Soem psudo代码

void yourclass::lineEditTextCahnged(const QString& text)
{

        QClipboard *pBoard = QApplication::clipboard();
        QString clipStr = pBoard->text();

        if (clipStr == text)
        {

           //THEN IT IS SOME PASTE ACTION.
           //HANDLE YOUR LENGTH VALIDATION.

        }
}
5.12版:

句柄无效QLineEdit::inputRejected信号

文件上说

注:当部分信号发生故障时,该信号仍将发出 文本被接受,但并非所有文本都被接受。例如,如果有 设置了最大长度,剪贴板文本长于最大长度 粘贴时的长度


覆盖更多事件,以捕获粘贴发生的所有方式?如果您无法找到正确的事件键盘粘贴、上下文菜单粘贴、拖放(至少),您可以使用带有调试打印的事件过滤器查看小部件获得的确切事件。您还可以将“最大长度”属性设置为比所需的实际最大值长,然后捕获textChanged信号。然后,如果文本太长,您可以通知用户并截断它。@hyde。大概我需要QLineEdit::paste插槽,但我不知道该怎么做。“也许会有不同的东西?”海德,我接受了奈杜的想法。我甚至试图覆盖textEdited虚拟函数。没有什么还有什么吗?这个信号是5点12分以来的新信号。如果你从我引用的链接中查看OP,我要求的是5.11或更低版本。@Igor你能试试更新的anwer吗?。检查它是否有效。从谷歌搜索粘贴处理中得到了这个想法。我会试试的。但我知道简单的键盘输入不会触发信号。也许它可以用于剪贴板粘贴?我会让你知道的。今天晚些时候或明天。
void yourclass::lineEditTextCahnged(const QString& text)
{

        QClipboard *pBoard = QApplication::clipboard();
        QString clipStr = pBoard->text();

        if (clipStr == text)
        {

           //THEN IT IS SOME PASTE ACTION.
           //HANDLE YOUR LENGTH VALIDATION.

        }
}