QLineEdit的 常用方法的示例


QLineEdit的使用方法总结
QLineEdit 属于Qt中的基本控件(basic),但在实际使用过程中,配合其他的Qt类后实现的功能还是很丰富的。其复杂程度不下于一个复杂控件,但没有成系统性的资料可供查阅,才特意总结一下,以备后用

一、PlaceholderText

占位符文本:

  • 只要行编辑为空, 行编辑则显示灰色的占位符文本
  • 左对齐时,空行编辑显示占位符文本,即使它有焦点。
  • 水平居中,当行编辑具有焦点时,占位符文本不会显示在光标下。
无焦点,一切正常居中,有焦点,占位文本消失左对齐,有焦点,占位文本显示
在这里插入图片描述在这里插入图片描述在这里插入图片描述
    lineEdit->setPlaceholderText("PlaceholderText1");
    lineEdit->setAlignment (Qt::AlignCenter);

    lineEdit2->setPlaceholderText("PlaceholderText2");

二、clearButton

可以让行编辑在包含一些文本时显示一个尾随清除按钮

在这里插入图片描述

lineEdit->setClearButtonEnabled (true);

三、QAction

QLineEdit 可以添加QAction ,提供额外的选择项,另外 QAction 还能够使用 setMenu方法 添加二级菜单

  • addAction(QAction *action, QLineEdit::ActionPosition position) -> void
  • addAction(const QIcon &icon, QLineEdit::ActionPosition position) -> QAction *

1. 使用默认的方式显示action的菜单

菜单的显示似乎是一个 DelayedPopup 的模式,按下并保持住,菜单才会跳出来
在这里插入图片描述

    // 获取 style 对象
    auto style = this->style ();
    // 用qt的图片 构建QAction对象
    QAction *a= new QAction(
                    style->standardIcon (QStyle::SP_TitleBarMinButton),
                    "test1",this);
    // lineEdit 在尾部添加 action
    lineEdit->addAction (a,QLineEdit::TrailingPosition);


    // lineEdit 在头部添加具有菜单的 action
    auto menua = lineEdit->addAction (
                  style->standardIcon (QStyle::SP_DesktopIcon),
                  QLineEdit::LeadingPosition);
    // 构造菜单
    QMenu * menu = new QMenu(this);
    // action 设置菜单
    menua->setMenu (menu);
    // 菜单添加菜单项
    menu->addAction (style->standardIcon (QStyle::SP_TitleBarCloseButton),"test1");
    menu->addAction (style->standardIcon (QStyle::SP_TitleBarMinButton),  "test2");

2. QToolButton作为QAction使用

  直接添加Action会有一个延时,然后才会显示菜单,这个不太符合人的感知,为了实现能点击后,就能瞬时弹出菜单,就只有使用QToolButton了,从Widget转到Action需要一个适配器一样的东西,来转换接口: QWidgetAction

  QWidgetAction类通过一个接口扩展了QAction,用于将自定义小部件插入到基于操作的容器中,例如工具栏,工具按钮等。
在这里插入图片描述

    // 获取 style 对象
    auto style = this->style ();
    // 用qt的图片 构建QAction对象
    QAction *a= new QAction(
                    style->standardIcon (QStyle::SP_TitleBarMinButton),
                    "test1",this);
    // lineEdit 在尾部添加 action
    lineEdit->addAction (a,QLineEdit::TrailingPosition);


    // lineEdit 在头部添加具有菜单的 widgetAction
    auto action = new QAction (
                  style->standardIcon (QStyle::SP_DesktopIcon),
                  "test2",this);

    QToolButton *toolButton = new QToolButton(this);
    // toolButton 可以直接使用action
    toolButton->setDefaultAction (action);
    // 使用QWidgetAction 作为适配器转换类型
    QWidgetAction * widgetAction = new QWidgetAction(this);
    // 适配器直接设置 toolButton
    widgetAction->setDefaultWidget (toolButton);

    // lineEdit 在头部添加 widgetAction
    lineEdit->addAction (widgetAction,QLineEdit::LeadingPosition);

    // 构造菜单
    QMenu * menu = new QMenu(this);
    // toolButton 设置菜单
    toolButton->setMenu (menu);
    // toolButton 设置弹出模式 : 立即弹出
    toolButton->setPopupMode (QToolButton::InstantPopup);
    // 菜单添加菜单项
    auto menuItem1 = menu->addAction ("test1");
    auto menuItem2 = menu->addAction ("test2");
    menu->addSeparator ();
    auto menuItem3 = menu->addAction ("test3");

    // 菜单项设置可选中
    menuItem1->setCheckable (true);
    menuItem2->setCheckable (true);
    menuItem3->setCheckable (true);
    // 菜单项1 默认选中
    menuItem1->setChecked (true);

    // 菜单项加入 QActionGroup 中,可实现互斥
    auto localQActionGroup = new QActionGroup(this);
    menuItem1->setActionGroup (localQActionGroup);
    menuItem2->setActionGroup (localQActionGroup);

2.1 去掉 ToolButton 的菜单的下拉按钮

使用QSS 设置就行

在这里插入图片描述

    toolButton->setStyleSheet (R"(
        QToolButton::menu-indicator{image:0}
    )");

四、QCompleter

设置自动补全器
在这里插入图片描述

    QStringList wordList;
    wordList << "alpha" << "Omega" << "omicron" << "zeta";

    QCompleter *completer = new QCompleter(wordList, this);
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    completer->setCompletionMode (QCompleter::UnfilteredPopupCompletion);
    lineEdit->setCompleter(completer);

五、inputMask

使用输入掩码控制数据输入格式
在这里插入图片描述

常用格式:

MaskNotes
000.000.000.000;_IP地址;空格是_
HH:HH:HH:HH:HH:HH;_MAC地址
0000-00-00ISO日期;空格是space
>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#序列号;空格为#,所有(字母)字符都转换为大写。
#999任何正数或负数,不超过四个字符,不带千位分隔符或小数位。-20,9999
>A<aaaaaaaaaa名字或姓氏中的第一个字母自动大写
IS\B\N 9-nnnnnn-9书号,其中包含文本、第一位和最后一位(这两位都是强制的)、第一位和最后一位之间字母和字符的任何组合。

六、QValidator

QIntValidator, QDoubleValidator, QRegExpValidator

在这里插入图片描述

    lineEdit->setText (QString::number (320));
    auto validator = new QDoubleValidator(10, 3000, 2);
    lineEdit->setValidator(validator);  //设置验证器
    validator->setNotation(QDoubleValidator::StandardNotation);
    connect (lineEdit,&QLineEdit::textChanged ,this,[=]{
        auto text = lineEdit->text ();
        auto pos = text.length ();
        auto state = validator->validate (text,pos);
        qout << text << state;

        if( state != QValidator::Acceptable ) {
            if(text.toDouble () >= validator->top ()){
                lineEdit->backspace ();
            }
            QString content = QString("范围应该是%1-%2")
                              .arg (validator->bottom ())
                              .arg (validator->top    ());
            QToolTip::showText(
                        lineEdit->mapToGlobal(QPoint(lineEdit->width (),0)),
                        content);
            ui->lineEdit->setStyleSheet("QLineEdit{border:1px solid red}"); //改变外观样式提示错误
        }
        if(state == QValidator::Acceptable)
        {
            lineEdit->setStyleSheet("QLineEdit{border:1px solid gray border-radius: 1px }");
        }
    });

七、EchoMode

ConstantValueDescription
Normal0输入字符时显示字符。这是默认设置。
NoEcho1不显示任何内容。这可能适用于即使密码长度也应保密的密码。
Password2显示与平台相关的密码掩码字符,而不是实际输入的字符。
PasswordEchoOnEdit3在编辑时按输入的字符显示字符,编辑完成按密码显示字符。

在这里插入图片描述

打印结果:

    connect (btn,&QAbstractButton::clicked,this,[this]{
        qout << ui->lineEdit_1->text () << ui->lineEdit_1->displayText ();	// "1234" "1234"
        qout << ui->lineEdit_2->text () << ui->lineEdit_2->displayText ();	// "1234" ""
        qout << ui->lineEdit_3->text () << ui->lineEdit_3->displayText ();	// "1234" "●●●●"
        qout << ui->lineEdit_4->text () << ui->lineEdit_4->displayText ();  // "1234" "●●●●" or "1234"
    });

八、备忘

相关的类和方法

1. Action

  • setDefaultAction

    • QMenu
    • QToolButton
  • addAction

    • QLineEdit

    • QMenu

    • QMenuBar

    • QToolBar

    • QGraphicsWidget

    • QWidget - QList<QAction *>

    • QActionGroup

2. QCompleter

  • setCompleter
    • QLineEdit
    • QComboBox

3. QValidator

  • QLineEdit
  • QSpinBox
  • QComboBox

4. 正则表达式

    // 获取尺寸数据的正则
		QString text = "32 & 64";
    static const QRegularExpression regExp(tr("(\\d+)\\s*[*&xX]\\s*(\\d+)"));
    Q_ASSERT(regExp.isValid());
    qout << regExp.isValid ();  // true

    const QRegularExpressionMatch match = regExp.match(text);
    // true 2 ("32 & 64", "32", "64")
    qout << match.hasMatch () << match.lastCapturedIndex ()<< match.capturedTexts ();
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QLineEdit 是一个常用的单行文本输入框控件,它提供了一些内置的信号,用于在特定情况下触发相应的事件。以下是 QLineEdit 常见的信号: 1. textChanged(const QString &text):当文本框内容发生变化时触发该信号。参数 text 是当前文本框中的文本内容。 2. editingFinished():当文本框完成编辑(即失去焦点)时触发该信号。 3. returnPressed():当用户按下回车键时触发该信号。 4. selectionChanged():当文本框的选中内容发生变化时触发该信号。 5. cursorPositionChanged(int oldPos, int newPos):当文本框的光标位置发生变化时触发该信号。参数 oldPos 是变化前的光标位置,newPos 是变化后的光标位置。 您可以通过连接这些信号与相应的槽函数来实现自定义的功能。例如,当文本发生变化时,您可以根据需要更新其他部分的内容;当用户按下回车键时,您可以执行特定的操作等。 以下是一个示例代码,演示了如何连接 QLineEdit 的信号与槽函数: ```python from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget, QVBoxLayout def text_changed(text): print("文本框内容变化:", text) def editing_finished(): print("编辑完成") def return_pressed(): print("回车键按下") app = QApplication([]) widget = QWidget() layout = QVBoxLayout(widget) lineEdit = QLineEdit() layout.addWidget(lineEdit) widget.setLayout(layout) widget.show() lineEdit.textChanged.connect(text_changed) # 连接textChanged信号与text_changed函数 lineEdit.editingFinished.connect(editing_finished) # 连接editingFinished信号与editing_finished函数 lineEdit.returnPressed.connect(return_pressed) # 连接returnPressed信号与return_pressed函数 app.exec_() ``` 在上面的代码中,我们创建了一个 QLineEdit 控件,并将其添加到 QWidget 中。然后,我们通过连接相应的信号与槽函数,实现了当文本内容变化、编辑完成、回车键按下时触发相应的事件。 您可以根据需要连接其他的信号,并编写相应的槽函数来处理特定的事件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值