gpt4 book ai didi

c++ - inputMask 用空格填充 QLineEdit

转载 作者:行者123 更新时间:2023-11-30 04:45:27 24 4
gpt4 key购买 nike

当我将inputMask设置为“99999”,运行程序,鼠标点击QLineEdit时,它填充了5个空格,所以我必须先删除空格,然后才输入我需要的值。

我试过将光标位置设置为 0 ,但它不起作用。还尝试将文本设置为空字符串,结果相同。

ui->engineCapacity_lineEdit->setInputMask("99999");
ui->engineCapacity_lineEdit->setCursorPosition(0);
ui->engineCapacity_lineEdit->setText("");

它假设将光标放在 lineEdit 的开头,而不是在该行的第 5 个字符上

最佳答案

默认情况下 QLineEdit 将根据点击的位置设置光标,如果字符数像您的情况一样受到限制,并且如果您在有效扇区之外按下,则光标将放置在该扇区的右边缘。

如果您希望发生这种情况,那么您必须在 mousePressEvent 中实现该逻辑:

class LineEdit: public QLineEdit
{
public:
using QLineEdit::QLineEdit;
protected:
void mousePressEvent(QMouseEvent *event)
{
QLineEdit::mousePressEvent(event);
setCursorPosition(0);
}
};

如果您想在您的 .ui 中使用 QLineEdit,那么您必须为此推广它,您可以查看以下出版物:

实现相同逻辑的另一种方法是使用事件过滤器:

*.h

class YourClass: public Foo{
// ...
public:
bool eventFilter(QObject *obj, QEvent *event);
};

*.cpp

    // constructor
ui->setupUi(this);
ui->engineCapacity_lineEdit->installEventFilter(this);
// ...

bool YourClass::eventFilter(QObject *obj, QEvent *event){
if(obj == ui->engineCapacity_lineEdit && event->type() == QEvent::MouseButtonPress)
{
ui->engineCapacity_lineEdit->setCursorPosition(0);
}
return Foo::eventFilter(obj, event);
}

关于c++ - inputMask 用空格填充 QLineEdit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com