我正在Qt 4.8上制作一个gui应用程序,它包含一些线路,让用户介绍一些信息 .
通常你可以用4种不同的方式写“hello”:
-
大写关闭,未按下班次= "hello"
-
大写关闭,按下班次= "HELLO"
-
上盖,未按下班次= "HELLO"
-
大写ON,按下shift = "hello"
我想要的是,无论用户如何写,行编辑必须始终以大写字母显示(“HELLO”) .
我现在使用的是:
Myclass.cpp:
auto validatorA = new MyValidator(parent);
myLineEdit->setValidator(validatorA);
Myclass.h(在包含之后和 class MyClass: ...
之前)
class MyValidator: public QValidator {
public:
MyValidator(QObject* parent=nullptr): QValidator(parent) {}
State validate(QString& input, int&) const override {
input = input.toUpper();
return QValidator::Acceptable;
}
};
它工作得很完美但我也需要这个行编辑只接受字母,空格和数字(没有符号标记)所以在设置验证器A之后我需要设置:
QRegExp rx("[A-Z\\.\\- 0-9]{0,30}");
QValidator *validator7 = new QRegExpValidator(rx, this);
myLineEdit->setValidator(validator7);
我注意到设计的最后一个验证器是决定行为的那个,所以我不能同时使用它们 . 如果我使用验证器7它工作正常,但它失败,案例编号为4:如果上限和按下移位,则没有写入任何内容,如果用户没有打字,即使他正在键入键盘也是如此 . 所以我不知道如何设置两个验证器(我还有其他不同的RegExp编辑线路) .
所以...我怎么能让我的lineedits跟随RegExp并且无论键盘的键盘组合移位,总是显示大写字母?
非常感谢
3 回答
使用验证器进行输入,并进行以下修改
对于大写字母,请使用LineEdit中的
textEdited
信号用插槽连接
QLineEdit
signaltextChanged()
:这样做:
对我来说很好 .
如果您只想在大写模式下显示字母 - 您可以将自定义字体设置为lineedit:
QFont f = font(); f.setCapitalization(QFont::AllUppercase); lineEdit->setFont(f);
但是你仍然需要正则表达式来验证输入 .