本文章讲怎么在输入框中添加图标,并增加显示 / 隐藏输入框文本内容。这里使用的Qt版本6.6.3,其他版本应该也可以用,不行的话需要自己调整一下
一般情况会使用QToolButton(或者QPushButton) + QLineEdit然后使用布局管理器(QHBoxLayout)来实现,这种方式也可以实现在输入框加入图标。如下
这里借用其他博主的文章:http://t.csdnimg.cn/qHs83,效果如图
如果觉得这种以上方式符合自己需求也可以使用这个方式,下边我讲介绍一种比较实现比较简单的方式
采用:QLineEdit + QAction的方式
首先,准备两个图片,作为图标
QIcon eyeIcon, eyeOffIcon;
FileReadWrite::loadSvgToIcon(":/eye-off-outline.svg", eyeOffIcon);
FileReadWrite::loadSvgToIcon(":/eye-outline.svg", eyeIcon);
创建一个action动作,并与输入框绑定,其中QLineEdit::TrailingPosition是显示在右边,其他方向的自己百度
passwordLineEdit->setEchoMode(QLineEdit::Password);
QAction* passwordAction = new QAction(passwordLineEdit);
passwordAction->setIcon(eyeIcon);
passwordLineEdit->addAction(passwordAction,QLineEdit::TrailingPosition);
这个时候图标就绑定到输入框上了,如图
然后就可以设置一个bool值用来判断输入框内容是否可见,初始为false不可见
在通过 connect 函数来实现切换图标和隐藏显示输入框内容操作
bool isPasswordVisible = false;
connect(passwordAction, &QAction::triggered, [this, passwordAction, &isPasswordVisible]() {
if (isPasswordVisible) {
passwordLineEdit->setEchoMode(QLineEdit::Password);
passwordAction->setIcon(eyeIcon);
} else {
passwordLineEdit->setEchoMode(QLineEdit::Normal);
passwordAction->setIcon(eyeOffIcon);
}
isPasswordVisible = !isPasswordVisible;
});
ok,这样就可以显示隐藏文本框内容了
完整代码
void Test::togglePasswordVisibility() {
FileReadWrite::loadSvgToIcon(":/eye-off-outline.svg", eyeOffIcon);
FileReadWrite::loadSvgToIcon(":/eye-outline.svg", eyeIcon);
passwordLineEdit->setEchoMode(QLineEdit::Password);
QAction* passwordAction = new QAction(passwordLineEdit);
passwordAction->setIcon(eyeIcon);
passwordLineEdit->addAction(passwordAction,QLineEdit::TrailingPosition);
bool isPasswordVisible = false;
connect(passwordAction, &QAction::triggered, [this, passwordAction, &isPasswordVisible]() {
if (isPasswordVisible) {
passwordLineEdit->setEchoMode(QLineEdit::Password);
passwordAction->setIcon(eyeIcon);
} else {
passwordLineEdit->setEchoMode(QLineEdit::Normal);
passwordAction->setIcon(eyeOffIcon);
}
isPasswordVisible = !isPasswordVisible;
});
}