QtC++与QLineEdit详解

介绍

QLineEdit 是 Qt 中的文本输入控件,用于在用户界面中接收和显示文本输入。它是一个非常常见的小部件,用于各种应用程序,以下是对 QLineEdit 在 Qt 中的详细讲解和作用:

  1. 文本输入: QLineEdit 允许用户输入文本,是用户界面中最基本的文本输入元素之一。

  2. 单行文本输入: QLineEdit 通常用于单行文本输入,例如用户名、密码、搜索关键字、文件路径等。

  3. 限制文本长度: 您可以设置最大文本长度,以确保用户输入的文本不超过指定的字符数。

  4. 输入验证: QLineEdit 允许您设置验证器,以确保用户输入符合特定的格式,例如整数、浮点数、正则表达式等。

  5. 密码输入: 可以将 QLineEdit 设置为密码输入模式,以显示隐藏的字符,例如用于输入密码的场景。

  6. 只读文本框: 您可以将 QLineEdit 设置为只读模式,用户无法编辑其中的文本,但可以复制文本内容。

  7. 自动完成: QLineEdit 支持自动完成,可以根据用户输入的前缀自动填充或提供建议。

  8. 提示工具提示: 您可以为 QLineEdit 设置工具提示,当鼠标悬停在输入框上时显示相关信息。

  9. 输入事件处理: 可以通过信号和槽机制捕获用户的输入事件,以执行特定操作或验证文本。

  10. 样式自定义: QLineEdit 允许您通过样式表(StyleSheet)自定义外观,包括颜色、字体、背景等。

  11. 文本选择和光标控制: 您可以选择文本、移动光标和获取光标位置,以支持文本编辑。

  12. 清除按钮: 可以启用一个清除按钮,允许用户轻松地删除输入的文本。

  13. 支持多语言: QLineEdit 支持多语言应用程序,可以轻松本地化输入框的文本。

  14. 禁用输入: 您可以禁用 QLineEdit,防止用户对其进行编辑,但仍然可以显示文本。

  15. 获取和设置文本: 您可以轻松地获取和设置 QLineEdit 中的文本内容。

  16. 支持正则表达式验证: QLineEdit 具有内置支持正则表达式验证的功能,允许您验证用户的输入。

  17. 对于表单和输入验证非常有用: QLineEdit 是在表单中常用的控件,用于收集用户输入并验证数据。

总之,QLineEdit 是一个非常有用的Qt控件,用于实现文本输入和编辑的需求。它用于各种应用程序,包括登录、搜索、数据输入、文件路径选择和文本编辑等。QLineEdit 提供了广泛的选项和功能,以满足不同应用程序的需求。

举例

cpp 复制代码
#include <QCoreApplication>
#include <QWidget>
#include <QLineEdit>
#include <QFormLayout>
#include <QLabel>
#include <QRegularExpression>
#include <QRegExpValidator>
#include <QIntValidator>
#include <QDoubleValidator>
#include <QCompleter>
#include <QFile>
#include <QTextStream>
#include <QStringListModel>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 示例1: 基本的 QLineEdit
    QLineEdit basicLineEdit("示例1: 基本的 QLineEdit");
    basicLineEdit.setPlaceholderText("请输入文本");
    basicLineEdit.show();

    // 示例2: 限制文本输入长度
    QLineEdit maxLengthLineEdit("示例2: 限制文本长度");
    maxLengthLineEdit.setMaxLength(10); // 最多输入10个字符
    maxLengthLineEdit.show();

    // 示例3: 文本输入校验 (只允许数字)
    QLineEdit numericLineEdit("示例3: 只允许数字");
    QIntValidator intValidator(1, 100); // 限制输入范围为1到100
    numericLineEdit.setValidator(&intValidator);
    numericLineEdit.show();

    // 示例4: 文本输入校验 (只允许浮点数)
    QLineEdit doubleLineEdit("示例4: 只允许浮点数");
    QDoubleValidator doubleValidator(0.0, 100.0, 2); // 限制输入范围为0到100,小数点后2位
    doubleLineEdit.setValidator(&doubleValidator);
    doubleLineEdit.show();

    // 示例5: 正则表达式验证
    QLineEdit regexLineEdit("示例5: 正则表达式验证 (邮箱)");
    QRegularExpression emailRegex("^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$");
    regexLineEdit.setValidator(new QRegExpValidator(emailRegex));
    regexLineEdit.show();

    // 示例6: 自动完成 (基于字符串列表)
    QLineEdit autoCompleteLineEdit("示例6: 自动完成 (字符串列表)");
    QStringList fruits = {"Apple", "Banana", "Cherry", "Grape", "Lemon"};
    QCompleter *completer = new QCompleter(fruits, &autoCompleteLineEdit);
    autoCompleteLineEdit.setCompleter(completer);
    autoCompleteLineEdit.show();

    // 示例7: 自动完成 (基于文件数据)
    QLineEdit fileAutoComplete("示例7: 自动完成 (基于文件数据)");
    QFile file("fruits.txt");
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QTextStream in(&file);
        QStringList fruitList;
        while (!in.atEnd()) {
            fruitList.append(in.readLine());
        }
        fileAutoComplete.setCompleter(new QCompleter(fruitList, &fileAutoComplete));
    }
    fileAutoComplete.show();

    // 示例8: 密码输入
    QLineEdit passwordLineEdit("示例8: 密码输入");
    passwordLineEdit.setEchoMode(QLineEdit::Password);
    passwordLineEdit.show();

    // 示例9: 只读文本框
    QLineEdit readOnlyLineEdit("示例9: 只读文本框");
    readOnlyLineEdit.setReadOnly(true);
    readOnlyLineEdit.show();

    // 示例10: 清除按钮
    QLineEdit clearableLineEdit("示例10: 清除按钮");
    clearableLineEdit.setClearButtonEnabled(true);
    clearableLineEdit.show();

    // 示例11: 提示工具提示
    QLineEdit tooltipLineEdit("示例11: 提示工具提示");
    tooltipLineEdit.setToolTip("这是一个输入框");
    tooltipLineEdit.show();

    // 示例12: 输入框风格
    QLineEdit styleLineEdit("示例12: 输入框风格");
    styleLineEdit.setStyleSheet("background-color: lightyellow; color: blue; border: 2px solid green;");
    styleLineEdit.show();

    // 示例13: 文本选择
    QLineEdit textSelection("示例13: 文本选择");
    textSelection.setText("可选文本");
    textSelection.setSelection(4, 5); // 选择文本的子串
    textSelection.show();

    // 示例14: 隐藏光标
    QLineEdit hideCursor("示例14: 隐藏光标");
    hideCursor.setCursor(Qt::BlankCursor);
    hideCursor.show();

    // 示例15: 设置输入框大小
    QLineEdit customSizeLineEdit("示例15: 设置输入框大小");
    customSizeLineEdit.setFixedWidth(200);
    customSizeLineEdit.show();

    // 示例16: 获取和设置文本
    QLineEdit getTextLineEdit("示例16: 获取和设置文本");
    getTextLineEdit.setText("初始文本");
    QString text = getTextLineEdit.text();
    getTextLineEdit.show();

    // 示例17: 获取光标位置
    QLineEdit cursorPosition("示例17: 获取光标位置");
    cursorPosition.setText("获取光标位置");
    int cursorPos = cursorPosition.cursorPosition();
    cursorPosition.show();

    // 示例18: 清除文本
    QLineEdit clearText("示例18: 清除文本");
    clearText.setText("要清除的文本");
    clearText.clear();
    clearText.show();

    // 示例19: 设置最大长度
    QLineEdit maxLengthLineEdit2("示例19: 设置最大长度");
    maxLengthLineEdit2.setMaxLength(5); // 最多输入5个字符
    maxLengthLineEdit2.show();

    // 示例20: 禁用输入
    QLineEdit disabledLineEdit("示例20: 禁用输入");
    disabledLineEdit.setDisabled(true);
    disabledLineEdit.show();

    return a.exec();
}
相关推荐
不是二师兄的八戒8 分钟前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
怀澈12210 分钟前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
爱编程的小生20 分钟前
Easyexcel(2-文件读取)
java·excel
chnming198733 分钟前
STL关联式容器之set
开发语言·c++
带多刺的玫瑰37 分钟前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
威桑44 分钟前
MinGW 与 MSVC 的区别与联系及相关特性分析
c++·mingw·msvc
熬夜学编程的小王1 小时前
【C++篇】深度解析 C++ List 容器:底层设计与实现揭秘
开发语言·数据结构·c++·stl·list
yigan_Eins1 小时前
【数论】莫比乌斯函数及其反演
c++·经验分享·算法
Mr.131 小时前
什么是 C++ 中的初始化列表?它的作用是什么?初始化列表和在构造函数体内赋值有什么区别?
开发语言·c++
阿史大杯茶1 小时前
AtCoder Beginner Contest 381(ABCDEF 题)视频讲解
数据结构·c++·算法