• QLineEdit的 常用方法的示例



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

    一、PlaceholderText

    占位符文本:

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

    二、clearButton

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

    在这里插入图片描述

    lineEdit->setClearButtonEnabled (true);
    
    • 1

    三、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");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

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

    使用QSS 设置就行

    在这里插入图片描述

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

    四、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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    五、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名字或姓氏中的第一个字母自动大写
    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 }");
            }
        });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    七、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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    八、备忘

    相关的类和方法

    1. Action

    • setDefaultAction

      • QMenu
      • QToolButton
    • addAction

      • QLineEdit

      • QMenu

      • QMenuBar

      • QToolBar

      • QGraphicsWidget

      • QWidget - QList

      • 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 ();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    项目计划不要拖,要赶紧排
    扬帆起航——Qt自定义控件介绍
    论文阅读-可泛化深度伪造检测的关键
    项目上线部署--》服务器部署流程(一)
    Linux下gcc编译器和gdb调试
    试着换个角度理解低代码平台设计的本质
    【附源码】计算机毕业设计SSM手游账号交易系统
    运营商三网精准大数据实时截流之网站实时数据
    L76.linux命令每日一练 -- 第11章 Linux系统管理命令 -- free和iftop
    算法读书笔记-3
  • 原文地址:https://blog.csdn.net/hitzsf/article/details/127585278