Qt:QLineEdit、QTextEdit、QComboBox、QSpinBox、QDateTimeEdit、QDial、QSlider

发布于:2025-07-11 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

一、QLineEdit

属性

二、QTextEdit

属性

三、QComboBox

属性

四、QSpinBox

属性

五、QDateTimeEdit

属性

六、QDial

属性

七、QSlider

属性


在上一篇介绍完显示类控件后,本文介绍常见的输入类控件。

一、QLineEdit

QLineEdit表示一个单行输入框,可以输入文本,但是无法换行。

属性

  •  这些属性比较枯燥,还是要看在具体代码中的实现,实现一个程序,来让用户输入个人信息。

    //设置姓名输入框
    ui->lineEdit_name->setFrame(true);
    ui->lineEdit_name->setPlaceholderText("请输入姓名");
    ui->lineEdit_name->setClearButtonEnabled(true);

    //设置密码输入框
    ui->lineEdit_password->setFrame(true);
    ui->lineEdit_password->setPlaceholderText("请输入密码");
    ui->lineEdit_password->setClearButtonEnabled(true);

    //设置密码隐藏
    ui->lineEdit_password->setEchoMode(QLineEdit::Password);

    //设置性别
    //设置电话
    ui->lineEdit_phone->setFrame(true);
    ui->lineEdit_phone->setPlaceholderText("请输入电话");
    ui->lineEdit_phone->setClearButtonEnabled(true);
    //电话有格式限制
    ui->lineEdit_phone->setInputMask("000-0000-0000");

  • InputMask所提供的限制十分有限,为了更好的约束输入,Qt提供了验证器,此处可以利用正则表达式来验证用户输入的电话号码是否合法,如果不合法,则提交按钮不能启用,如果合法,则可以点击提交按钮。

QRegExp regexp(R"(^1\d{10}$)");
ui->lineEdit_phone->setValidator(new QRegExpValidator(regexp));

^1表示字符串必须以1开头

\d表示数字

{10}表示\d重复10次

$表示结尾

由于这里用了RawString,所以不用对\d转义 

//当输入框中输入内容后,触发信号的槽函数
void Widget::on_lineEdit_phone_textEdited(const QString &arg1)
{
    //在槽函数中验证输入内容和正则表达式是否匹配成功
    QString text = arg1;
    int pos;//第二个参数是输出型参数,当匹配失败的时候,返回从哪个位置开始匹配失败的
    if(ui->lineEdit_phone->validator()->validate(text,pos) ==QValidator::Acceptable )
    {
        ui->pushButton_submit->setEnabled(true);
    }
    else
        ui->pushButton_submit->setEnabled(false);

}

  • 编写代码,实现密码输入的二次确认,如果不一致,就显示两次输入密码不一致。

void Widget::Compare()
{
    QString s1 = ui->lineEdit_password->text();
    QString s2 = ui->lineEdit_passwordAgain->text();
    if(s1.isEmpty() && s2.isEmpty())
    {
        ui->label_dispaly->setText("您输入的密码为空");
        return;
    }
    if(s1 == s2)
    {
        ui->label_dispaly->setText("输入的密码一致");
    }
    else
    {
        ui->label_dispaly->setText("输入的密码不一致");
    }
    return;
}
void Widget::on_lineEdit_password_textEdited(const QString &arg1)
{
 (void)arg1;
    this->Compare();
}

void Widget::on_lineEdit_passwordAgain_textEdited(const QString &arg1)
{
    (void)arg1;
    this->Compare();
}

  • 再实现一个功能,切换密码的显示状态,密码默认是隐藏的,可以点击显示按钮来切换。

void Widget::on_checkBox_toggled(bool checked)
{
    if(checked)
    {
        ui->lineEdit_password->setEchoMode(QLineEdit::Normal);
        ui->lineEdit_passwordAgain->setEchoMode(QLineEdit::Normal);
    }
    else
    {
        ui->lineEdit_password->setEchoMode(QLineEdit::Password);
        ui->lineEdit_passwordAgain->setEchoMode(QLineEdit::Password);

    }
}

二、QTextEdit

属性

常用信号

  • 获取QTextEdit中的内容

void Widget::on_textEdit_textChanged()
{
 const QString& content = ui->textEdit->toPlainText();
 qDebug() << content;
}

  • 验证输入框的信号 

void Widget::on_textEdit_selectionChanged()
{
 const QTextCursor& cursor = ui->textEdit->textCursor();
 qDebug() << "[selectionChanged] " << cursor.selectedText();
}

void Widget::on_textEdit_cursorPositionChanged()
{
 const QTextCursor& cursor = ui->textEdit->textCursor();
 qDebug() << "[cursorPositionChanged] " << cursor.position();
}

三、QComboBox

下拉框

属性

  • 核心方法

  • 核心信号 

  • 给下拉框添加条目 

ui->comboBox->addItem("巨⽆霸");
ui->comboBox->addItem("⻨辣鸡腿堡");

ui->comboBox_2->addItem("薯条");
ui->comboBox_2->addItem("⻨辣鸡翅");

ui->comboBox_3->addItem("可乐");
ui->comboBox_3->addItem("雪碧");

四、QSpinBox

属性

  • 核心信号 

ui->spinBox->setRange(1,5);//设置范围
ui->spinBox->setValue(3);//设置初始值

五、QDateTimeEdit

属性

  • 核心信号

  • 获取两个日期直接的差 

//获取到两个时间框的时间⽇期
QDateTime timeOld = ui->dateTimeEdit_old->dateTime();
QDateTime timeNew = ui->dateTimeEdit_new->dateTime();
// 计算⽇期差值
int days = timeOld.daysTo(timeNew);
int hours = (timeOld.secsTo(timeNew) / 3600) % 24;

六、QDial

表示一个旋钮

属性

  • 核心信号

编写程序,拖动旋钮来改变窗口不透明度

// 设置可以循环旋转
 ui->dial->setWrapping(true);
 // 设置刻度线可⻅
 ui->dial->setNotchesVisible(true);
 // 设置最⼤值为
 ui->dial->setMaximum(100);
 // 设置最⼩值为
 ui->dial->setMinimum(0);
 // 设置初始值为
 ui->dial->setValue(100);

void Widget::on_dial_valueChanged(int value)
{
ui->label->setText(QString("当前不透明度为: ") + QString::number(value));
this->setWindowOpacity((double)value / 100);
}

七、QSlider

表示一个滑动条。

QSlider和QDial都是继承自QAbstractSlider,用法类似。

属性

 核心信号

  •  编写程序,实现两个滑动条,一个水平、一个垂直,拖动可以改变窗口的大小。

    ui->horizontalSlider->setMinimum(100);
    ui->horizontalSlider->setMaximum(2000);
    ui->horizontalSlider->setValue(800);
    ui->horizontalSlider->setSingleStep(500);

    ui->verticalSlider->setMinimum(100);
    ui->verticalSlider->setMaximum(1500);
    ui->verticalSlider->setValue(600);
    ui->verticalSlider->setSingleStep(300);

void Widget::on_horizontalSlider_valueChanged(int value)
{
    QRect rect = this->geometry();
    this->setGeometry(rect.x(),rect.y(),value,rect.height());
}

void Widget::on_verticalSlider_valueChanged(int value)
{
    QRect rect = this->geometry();
    this->setGeometry(rect.x(),rect.y(),rect.width(),value);
}

  • 用快捷键增加或减少滑动条的值

void Widget::on_horizontalSlider_valueChanged(int value)
{
    QString s = QString::number(value);
    ui->label->setText("当前值为"+s);
}

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QShortcut* shortCut1 = new QShortcut(this);
    shortCut1->setKey(QKeySequence("-"));

    QShortcut* shortCut2 = new QShortcut(this);
    shortCut2->setKey(QKeySequence("="));

    //按下快捷键,发出信号,执行槽函数
    connect(shortCut1,&QShortcut::activated,this,&Widget::subValue);
    connect(shortCut2,&QShortcut::activated,this,&Widget::addValue);

}

void Widget::addValue()
{
    int v = ui->horizontalSlider->value();
    ui->horizontalSlider->setValue(v+5);
}

void Widget::subValue()
{
    int v = ui->horizontalSlider->value();
    ui->horizontalSlider->setValue(v-5);
}

网站公告

今日签到

点亮在社区的每一天
去签到