[Qt]常用控件先容-输入类控件-QLineEdit、QTextEdit、QComboBox控件 ...

打印 上一主题 下一主题

主题 812|帖子 812|积分 2436

目录
1.Line Edit控件
属性
焦点信号
Demo:XX软件登录
正则表达式-验证器
Demo:验证器与按钮的配合 
Demo:验证两次输入的暗码一致
Demo:显示与隐藏暗码按钮
2.Text Edit控件 
属性
焦点信号
几个信号的演示操纵
3.Combo Box控件
属性
焦点方法      
焦点信号
Demo:点餐小程序
将文件中的内容加载到下拉框


1.Line Edit控件

属性

属性阐明
text输入框中的文本,不仅仅是可以通过代码来设置,还可以通过用户直接在程序界面中举行键盘输入修改文本
inputMask输入内容的格式约束
maxLength文本的最大长度
frame是否添加边框
echoMode 输入的字符回显的方式
QLineEdit::Normal是默认值,输入什么显示什么
QLineEdit:assword,输入的字符会显示为用*或=代替
QLineEdit::NoEcho,什么也不显示
cursorPosition光标所在的位置
alignment文本的对齐方式
dragEnabled是否允许拖拽,相当于粘贴
readOnly是否允许被修改
placeholderText当输入框为空的时候,显示什么提示信息
clearButtonEnabled是否会主动显示出扫除按钮
焦点信号

信号阐明
void cursorPositionChanged(int old, int new)当鼠标移动时会发出信号,old为旧位置,new为鼠标新位置
void editingPressed()当按回车键的时候,或者行编译失去焦点的时候,触发信号
void returnPressed()当按下回车键的时候发出信号,假如设置了验证器,必须经过验证通过,才会发出此信号
void selectionChanged()当选中的文本改变的时候,发出信号
void textChanged(const QString& text)当QLineEdit中的文本改变的时候,发出此信号, text是新文本,代码中修改也可以触发
void textEdited(const QString& text)和textChanged一样,但是代码中修改不可以触发
Demo:XX软件登录

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QDebug>
  4. Widget::Widget(QWidget *parent)
  5.     : QWidget(parent)
  6.     , ui(new Ui::Widget)
  7. {
  8.     ui->setupUi(this);
  9.     //初始化第一个
  10.     ui->lineEdit_name->setPlaceholderText("请输入账号");
  11.     ui->lineEdit_name->setClearButtonEnabled(true);
  12.     //初始化第二个输入框
  13.     ui->lineEdit_password->setPlaceholderText("请输入密码");
  14.     ui->lineEdit_password->setClearButtonEnabled(true);
  15.     ui->lineEdit_password->setEchoMode(QLineEdit::Password);  //设置为显示密码形式
  16.     //初始化第三个输入框
  17.     ui->lineEdit_telephone->setPlaceholderText("请输入电话号码");
  18.     ui->lineEdit_telephone->setClearButtonEnabled(true);
  19.     ui->lineEdit_telephone->setInputMask("000-0000-0000");    //进行简单的校验
  20. }
  21. void Widget::on_pushButton_submit_clicked()
  22. {
  23.     //获取一下输入的内容,之后可以跟业务逻辑连接,处理输入的内容
  24. }
  25. Widget::~Widget()
  26. {
  27.     delete ui;
  28. }
复制代码


正则表达式-验证器

        LineEdit内部的inputMask对于输入内容的限定非常有限,也不能很好的去规定输入的内容,所以一样平常都需要使用正则表达式去对输入的字符做严格的规范。正则表达式是盘算机的一个通用的概念,与具体的编程语言没有关系,任何语言都是可以使用的
        正则表达式本质上就是一个带有特别字符的字符串,来表现另一个字符串的特征,例如以什么开头,以什么末端,用什么分割,数字占几位,怎么分列的。基于和正则表达式的对比,就可以验证一个字符串的规范性。
        我们在使用验证器的时候,需要首先创建一个正则表达式QRegExp对象并举行初始化,之后将正则表达式对象放入验证器中,相当于注册验证器的操纵。仅仅这是注册了,对于输入的字符串验证匹配或不匹配之后该怎么处理,是需要我们自己去定义的。例如关联了一个按钮,假如不匹配的话就无法提交。
   // 创建一个正则表达式对象--以1开头的11位数字
  QRegExp regExp("^1\\d{10}$");
  // 注册一个验证器给输入框
  ui->lineEdit->setValidator(new QRegExpValidator(regExp));
    virtual QValidator::State validate(QString& input, int& pos) const override;
  
  // 第一个参数是要传入要验证的字符串,第二个参数是假如匹配失败的话,返回失败位置
  // 留意他需要的黑白const参数,所以说不可以传入槽函数自带的获取用户输入内容的const范例字符串
  // 返回值是一个枚举范例,是在QValidator作用域内
      enum State {
          Invalid,             //不合法
          Intermediate,   //不关注
          Acceptable      //通过
      };
  Qt内置了4个验证器对象,都是继承于QValidator,会重写validate匹配函数。

Demo:验证器与按钮的配合 

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QRegExpValidator>
  4. Widget::Widget(QWidget *parent)
  5.     : QWidget(parent)
  6.     , ui(new Ui::Widget)
  7. {
  8.     ui->setupUi(this);
  9.     //创建一个正则表达式对象--以1开头的11位数字
  10.     QRegExp regExp("^1\\d{10}$");
  11.     //注册一个验证器给输入框
  12.     ui->lineEdit->setValidator(new QRegExpValidator(regExp));
  13.     //设置按钮默认为不可提交状态
  14.     ui->pushButton_submit->setEnabled(false);
  15. }
  16. Widget::~Widget()
  17. {
  18.     delete ui;
  19. }
  20. void Widget::on_lineEdit_textChanged(const QString &text)
  21. {
  22.     QString content = text;
  23.     int pos = 0;
  24.     if(ui->lineEdit->validator()->validate(content, pos) == QValidator::Acceptable)
  25.     {
  26.         //验证通过
  27.         ui->pushButton_submit->setEnabled(true);
  28.     }
  29.     else
  30.     {
  31.         //验证不通过
  32.         ui->pushButton_submit->setEnabled(false);
  33.     }
  34. }
复制代码
Demo:验证两次输入的暗码一致

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent)
  4.     : QWidget(parent)
  5.     , ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     //设置两个输入框为密码形式
  9.     ui->lineEdit->setEchoMode(QLineEdit::Password);
  10.     ui->lineEdit_2->setEchoMode(QLineEdit::Password);
  11. }
  12. Widget::~Widget()
  13. {
  14.     delete ui;
  15. }
  16. void Widget::on_lineEdit_textEdited(const QString &arg1)
  17. {
  18.     (void)arg1;
  19.     this->Compare();
  20. }
  21. void Widget::on_lineEdit_2_textEdited(const QString &arg1)
  22. {
  23.     (void)arg1;
  24.     this->Compare();
  25. }
  26. void Widget::Compare()
  27. {
  28.     const QString& password1 = ui->lineEdit->text();
  29.     const QString& password2 = ui->lineEdit_2->text();
  30.     if(password1.isEmpty() && password2.isEmpty())
  31.     {
  32.         ui->label->setText("密码为空");
  33.     }
  34.     else if(password1 == password2)
  35.     {
  36.         ui->label->setText("密码一致");
  37.     }
  38.     else
  39.     {
  40.         ui->label->setText("密码不一致");
  41.     }
  42. }
复制代码
Demo:显示与隐藏暗码按钮

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent)
  4.     : QWidget(parent)
  5.     , ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     //设置密码显示形式
  9.     ui->lineEdit->setEchoMode(QLineEdit::Password);
  10. }
  11. Widget::~Widget()
  12. {
  13.     delete ui;
  14. }
  15. //状态切换时候的槽函数
  16. void Widget::on_checkBox_toggled(bool checked)
  17. {
  18.     //如果选中了,就改变输入框显示状态改为一般状态
  19.     if(checked == true)
  20.     {
  21.         ui->lineEdit->setEchoMode(QLineEdit::Normal);
  22.     }
  23.     else
  24.     {
  25.         ui->lineEdit->setEchoMode(QLineEdit::Password);
  26.     }
  27. }
复制代码


2.Text Edit控件 

        该控件属于多行输入的控件,有QTextEdit和QPlainTextEdit两个控件,但是QPlainTextEdit只能表现纯文本,而QTextEdit不仅可以表现纯文本,还可以表现markdown文本和html文本。
属性

        
属性阐明
markdown输入框持有的内容,支持markdown格式
html输入框持有的内容,支持html格式
placeholderText输入康没有内容的时候,显示的提示信息
readOnly是否只是可读
undoRedoEnable是否开启undo/redo功能,撤销和还原ctrl + z/y
autoFormating开启主动格式化
tabstopWidth按下tab缩进多少空间
overwriteMode是否开启覆盖写入模式
acceptRichText是否接收富文本内容
verticalScrollBarPolicy 垂直方向滚动条的出现策略
Qt::ScrollBarAsNeeded根据内容主动决定是否需要
Qt::ScrollBarAlwaysOff一直关闭滚动条
Qt::ScrollBarAlwaysOn总是显示滚动条
horizontalScrollBarPolicy水平方向滚动条的出现策略,参数和上述一致
焦点信号

信号属性
textChanged()文本内容改变时触发
selectionChanged()选中范围改变时触发
cursorPositionChanged()光标移动时触发
undoAvailabled(bool)可以举行undo操纵时触发
redoAvailable(bool)可以举行redo操纵时触发
copyAvailavle(bool) 文本被选中/取消的时候触发
几个信号的演示操纵

        这个控件获取文本内容的方法和其他的控件有一些区别,他是toXXX,xxx表现的是文本的范例,也就是toPlainText、toHtml、toMarkdown。别的对于QString范例,想要从数字转化为该范例的字符串需要使用QString内置的number函数,to_string函数是c++的string类提供的。

  1. //文本改变的时候触发信号对应的槽函数
  2. void Widget::on_textEdit_textChanged()
  3. {
  4.     //统计字符个数
  5.     const size_t text_size = ui->textEdit->toPlainText().size();
  6.     QString str = "文本字数:";
  7.     str += QString::number(text_size);
  8.     //更新文章字符个数
  9.     ui->label_size->setText(str);
  10. }
复制代码
        假如我们想要获取到我们选中的字符串,然后统计个数的话,需要使用textCursor函数获取,然后用QTextCursor对象接收字符串,这样使用qDebug函数打印出来的就是我们选中的字符串。如何统计个数呢对于QTextCursor,需要使用selectedtext函数,使其转换为QString对象才可以使用size函数。
       QTextCursor textCursor() const;
      QString selectedText() const;
  1. //选中的文本发生改变的时候触发信号对应的和槽函数
  2. void Widget::on_textEdit_selectionChanged()
  3. {
  4.     //获取光标选中的文本内容
  5.     QTextCursor cursor = ui->textEdit->textCursor();
  6.     const size_t path_size = cursor.selectedText().size();
  7.     QString str = "选中字数:";
  8.     str += QString::number(path_size);
  9.     //更新选中文本字符个数
  10.     ui->label_path_size->setText(str);
  11. }
复制代码
        如何得到光标位置呢,也还是需要QTextCursor对象内部的position函数。
  1. //光标位置发生改变触发信号对应的槽函数
  2. void Widget::on_textEdit_cursorPositionChanged()
  3. {
  4.     //获取光标位置
  5.     QTextCursor cursor = ui->textEdit->textCursor();
  6.     const size_t pos = cursor.position();
  7.     QString str = "光标位置:";
  8.     str += QString::number(pos);
  9.     //更新文本中记录的光标位置
  10.     ui->label_pos->setText(str);
  11. }
复制代码
        对于undo/redo操纵,我们在不写他的槽函数的时候,也是会执行的,当控件收到ctrl + z操纵的时候,会识别出是undo操纵,会调用undo()函数,执行撤销操纵,同时假如有槽函数关联的话,会去执行我们的槽函数。

3.Combo Box控件

        是一个下拉框控件
属性

属性阐明
currentText当前选中的文本
currentIndex当前选中的条目下标,从0开始,没有为-1
editable是否允许被修改,默认是不允许的,假如说允许的时候,就类似于多个单行输入框QLineEdit,也可以设置validator
iconSize下拉框图标的大小
maxCount最多允许多少个条目
焦点方法      

方法阐明
addItem(const QString&)添加一个条目
currentIndex()获取当前条目标下标
currentText()获取当前条目标文本内容
焦点信号

信号阐明
activated(int)
activated(const QString&)
当用户选中了一个选项的时候发出信号。
相当于用户打开下拉框,但是还没有选择,而是鼠标滑过选项的时候发出的信号。此时选项会触发信号产生高亮,叫做激活。
currentIndexChanged(int)
currentIndexChanged(const QString&)
当前选项发生改变的时候发出信号。
相当于用户明白选中了一个选项
editTextChanged(const QString&)编辑框中的文本发生改变的时候发出的信号
Demo:点餐小程序

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent)
  4.     : QWidget(parent)
  5.     , ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     ui->comboBox->addItem("AAAAAAAA");
  9.     ui->comboBox->addItem("BBBBBBBB");
  10.     ui->comboBox_2->addItem("CCCCCCCC");
  11.     ui->comboBox_2->addItem("DDDDDDDD");
  12.     ui->comboBox_3->addItem("EEEEEEEE");
  13.     ui->comboBox_3->addItem("FFFFFFFF");
  14. }
  15. Widget::~Widget()
  16. {
  17.     delete ui;
  18. }
  19. void Widget::on_pushButton_clicked()
  20. {
  21.     QString str = "您选择的订单为:";
  22.     str += ui->comboBox->currentText();
  23.     str += "+";
  24.     str += ui->comboBox_2->currentText();
  25.     str += "+";
  26.     str += ui->comboBox_3->currentText();
  27.     ui->label_4->setText(str);
  28. }
复制代码

        不仅仅可以使用代码添加,也可以直接在Qt Designer中右键选择编辑项目即可添加和删除等操纵。
将文件中的内容加载到下拉框

   string和QString之间的转换:
  inline QString QString::fromStdString(const std::string &s);
  inline std::string QString::toStdString() const;
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <fstream>
  4. #include <QDebug>
  5. Widget::Widget(QWidget *parent)
  6.     : QWidget(parent)
  7.     , ui(new Ui::Widget)
  8. {
  9.     ui->setupUi(this);
  10.     //打开文件
  11.     std::ifstream file("D:/aQT/qt-study/ComboBox_2/config.txt");
  12.     if(!file.is_open())
  13.     {
  14.         qDebug() << "打开文件失败";
  15.         return;
  16.     }
  17.     //按照行来读取文本
  18.     std::string line;
  19.     while(std::getline(file, line))
  20.     {
  21.         ui->comboBox->addItem(QString::fromStdString(line));
  22.     }
  23.     //关闭文件
  24.     file.close();
  25. }
  26. Widget::~Widget()
  27. {
  28.     delete ui;
  29. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表