Qt常用控件 输入类控件

文章目录

  • 1.QLineEdit
    • 1.1 常用属性
    • 1.2 常用信号
    • 1.3 例子1,录入用户信息
    • 1.4 例子2,正则验证手机号
    • 1.5 例子3,验证输入的密码
    • 1.6 例子4,显示密码
  • 2. QTextEdit
    • 2.1 常用属性
    • 2.2 常用信号
    • 2.3 例子1,获取输入框的内容
    • 2.4 例子2,使用各种信号
  • 3. QComboBox
    • 2.1 常用属性和方法
    • 2.2 常用信号
    • 2.3 例子1,点餐
    • 2.4 例子2,从文件读取内容
  • 4. QSpinBox
    • 4.1 常用属性
    • 4.2 常用信号
    • 4.3 例子1,饮料个数
  • 5. QDateTimeEdit
    • 4.1 常用属性
    • 4.2 常用信号
    • 4.3 例子1,计算年龄
  • 6. QDial
    • 6.1 常用属性
    • 6.2 常用信号
    • 6.3 例子1,调整窗口不透明度
  • 7. QSlider
    • 7.1 常用属性
    • 7.2 常用信号
    • 7.3 例子1,调整窗口大小
    • 7.3 例子2,快捷键调整

1.QLineEdit

QLineEdit表示单行输入框

1.1 常用属性

属性说明
text输入框中的文本内容,可用于获取或设置当前显示的文本。
inputMask对输入内容的格式进行约束,规定用户只能按照特定的格式输入文本,例如限制输入日期、电话号码等格式。
maxLength输入框允许输入的最大长度,当输入的文本达到该长度后,用户将无法继续输入更多字符。
frame控制是否为输入框添加边框,设置为 true 显示边框,false 则不显示。
echoMode控制输入框中文本的显示方式,有以下几种模式: - QLineEdit::Normal:默认模式,输入框会正常显示输入的文本。 - QLineEdit::Password:输入的字符会被隐藏,通常用星号(*)或等号(=)代替,常用于密码输入场景。 - QLineEdit::NoEcho:输入框不会显示任何输入的字符。
cursorPosition表示光标在输入框中的位置,位置从 0 开始计数,可用于获取或设置光标的位置。
alignment设置输入框内文字的对齐方式,可同时设置水平和垂直方向的对齐,例如左对齐、右对齐、居中对齐等。
dragEnabled控制是否允许对输入框中的文本进行拖拽操作,设置为 true 允许,false 则禁止。
readOnly控制输入框是否为只读状态,设置为 true 时,输入框内容不可修改,用户只能查看;false 时可正常编辑。
placeHolderText当输入框内容为空时,显示的提示信息,用于引导用户输入相应内容。
clearButtonEnabled控制输入框是否会自动显示 “清除按钮”,设置为 true 显示,点击该按钮可清空输入框内容;false 则不显示。

1.2 常用信号

信号说明
void cursorPositionChanged(int old, int new)当鼠标移动(更准确地说是光标位置改变)时发出此信号。old 表示光标先前的位置,new 表示光标新的位置。
void editingFinished()当按下返回键或者回车键,或者行编辑框失去焦点时,发出此信号。通常用于在用户完成一次输入操作后执行相应逻辑。
void returnPressed()当按下返回键或回车键时发出此信号。如果设置了验证器,必须要验证通过才能触发该信号,可用于在用户按下回车键提交输入时进行处理。
void selectionChanged()当选中的文本发生改变时,发出此信号。可用于实现与文本选择状态相关的功能,如根据选中内容更新操作按钮状态。
void textChanged(const QString &text)QLineEdit 中的文本改变时,发出此信号,text 是新的文本内容。代码对文本的修改也能够触发这个信号,适用于实时响应文本变化的场景。
void textEdited(const QString &text)QLineEdit 中的文本改变时,发出此信号,text 是新的文本内容。但代码对文本的修改不能触发这个信号,主要用于区分用户手动编辑和代码修改文本的情况。

1.3 例子1,录入用户信息

Qt Designer中设置基本框架

image-20250129162929523

widget.cpp核心代码如下

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置nameui->lineEdit_name->setPlaceholderText("请输入姓名");ui->lineEdit_name->setClearButtonEnabled(true);// 设置phoneui->lineEdit_phone->setPlaceholderText("请输入电话");ui->lineEdit_phone->setClearButtonEnabled(true);ui->lineEdit_phone->setInputMask("000-0000-0000");      // 0表示数字, 也可以是其它数字// 设置passwordui->lineEdit_password->setPlaceholderText("请输入密码");ui->lineEdit_password->setClearButtonEnabled(true);ui->lineEdit_password->setEchoMode(QLineEdit::Password);
}void Widget::on_pushButton_clicked()
{QString gender = ui->radioButton_male->isChecked() ? "男" : "女";qDebug() << ui->lineEdit_name->text()     << ' '<< gender                        << ' '<< ui->lineEdit_phone->text()    << ' '<< ui->lineEdit_password->text();
}

点击提交后,将结果打印到控制台上

image-20250129163256626

1.4 例子2,正则验证手机号

const QValidator *QLineEdit::validator() constQLineEdit 类中的一个成员函数:
该函数的主要功能是获取当前 QLineEdit 控件所使用的验证器对象的指针


QValidator::State QValidator::validate(QString &input, int &pos) constQValidator 类中的一个纯虚函数,QValidator 是 Qt 中用于验证用户输入的基类,该函数用于对输入的字符串进行验证,并根据验证结果返回相应的状态。:

  • 返回值QValidator::State 是一个枚举类型,用于表示验证的结果,有以下三种取值:
    • QValidator::Invalid:表示输入无效,不符合验证规则。
    • QValidator::Intermediate:表示输入处于中间状态,部分符合验证规则,但还不完整或需要进一步输入才能确定是否有效。
    • QValidator::Acceptable:表示输入完全有效,符合验证规则。
  • 参数:
    • QString &input:这是一个引用类型的参数,代表需要进行验证的输入字符串。在验证过程中,函数可能会修改这个字符串,使其符合验证规则。
    • int &pos:同样是引用类型的参数,代表输入字符串中光标的位置。在验证过程中,函数可能会调整光标的位置。

设置一个输入框,使用正则表达式验证该手机号。在Qt Designer中设置基本框架

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include "widget.h"
#include "ui_widget.h"
#include <QRegExpValidator>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lineEdit->setClearButtonEnabled(true);ui->lineEdit->setPlaceholderText("请输入手机号");// 创建一个正则表达式对象QRegExp reg("^1(3[0-9]|5[0-3,5-9]|7[1-3,5-8]|8[0-9])\\d{8}$");// 给lineEdit注册一个validatorui->lineEdit->setValidator(new QRegExpValidator(reg));
}Widget::~Widget()
{delete ui;
}void Widget::on_lineEdit_textChanged(const QString &text)
{// 获取验证器const QValidator* validator = ui->lineEdit->validator();QString non_const_text = text;		// validate的第一个参数要求是非const的int pos = 0;// 判断验证是否通过if(validator->validate(non_const_text, pos) == QValidator::Acceptable) {ui->pushButton->setEnabled(true);} else {ui->pushButton->setEnabled(false);}
}

不能键入不正确的手机号。何时为一个合法的手机号,何时按钮可用

1.5 例子3,验证输入的密码

Qt Designer中设置基本框架

image-20250129213111430

设置槽函数

void Widget::check()
{const QString s1 = ui->lineEdit->text();const QString s2 = ui->lineEdit_2->text();if(s1.isEmpty() || s2.isEmpty()) {const QString set_text = (s2.isEmpty() ? "确认密码为空" : "密码为空");ui->label->setText(set_text);} else if(s1 != s2) {ui->label->setText("两次输入的密码不一致");} else {ui->label->setText("密码匹配成功");}
}void Widget::on_lineEdit_textChanged(const QString &arg1)
{(void) arg1;check();
}void Widget::on_lineEdit_2_textChanged(const QString &arg1)
{(void) arg1;check();
}

image-20250129213134939

1.6 例子4,显示密码

Qt Designer中设置基本框架

image-20250129214318374

设置槽函数

void Widget::on_checkBox_stateChanged(int state)
{if(state == Qt::Checked) {ui->lineEdit->setEchoMode(QLineEdit::Normal);} else {ui->lineEdit->setEchoMode(QLineEdit::Password);}
}

image-20250129214734148

2. QTextEdit

QTextEdit表示多行输入框

2.1 常用属性

属性说明
plainText当前文本内容(以纯文本形式)。获取当前文本内容(纯文本格式)使用的是toPlainText()
markdown输入框内持有的内容,支持 Markdown 格式,能够自动将 Markdown 文本渲染成 HTML。toMarkdown()获取内容
html输入框内持有的内容,可以支持大部分 HTML 标签,包括 imgtable 等。toHtml()获取内容
placeHolderText输入框为空时提示的内容
readOnly控制输入框是否为只读状态
undoRedoEnable控制是否开启 Undo/Redo 功能。按下 Ctrl + Z 触发 Undo,按下 Ctrl + Y 触发 Redo
autoFormating控制是否开启自动格式化
tabstopWidth按下 Tab 键时缩进所占的空间大小
overwriteMode控制是否开启覆盖写模式
acceptRichText控制是否接收富文本内容
verticalScrollBarPolicy垂直方向滚动条的出现策略: - Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条(默认值) - Qt::ScrollBarAlwaysOff:总是关闭滚动条 - Qt::ScrollBarAlwaysOn:总是显示滚动条
horizontalScrollBarPolicy水平方向滚动条的出现策略: - Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条(默认值) - Qt::ScrollBarAlwaysOff:总是关闭滚动条 - Qt::ScrollBarAlwaysOn:总是显示滚动条

2.2 常用信号

信号说明
textChanged()QTextEdit 中的文本内容发生改变时触发该信号,可用于实时监测文本内容的变化,例如在用户输入或删除文本时做出响应。
selectionChanged()当文本的选中范围发生改变时触发此信号,比如用户选中新的文本区域或者取消已选的文本区域,可利用该信号实现与文本选择相关的功能。
cursorPositionChanged()光标在 QTextEdit 中移动时触发该信号,可用于实现一些依赖光标位置的操作,如显示光标所在的行号和列号等。
undoAvailable(bool)当可以进行 Undo(撤销)操作时触发此信号,参数 bool 表示是否可以进行撤销操作,true 表示可以,false 表示不可以,可据此更新撤销操作相关的界面元素状态。
redoAvailable(bool)当可以进行 Redo(重做)操作时触发此信号,参数 bool 表示是否可以进行重做操作,true 表示可以,false 表示不可以,可用于更新重做操作相关的界面元素状态。
copyAvailable(bool)文本被选中或取消选中时触发该信号,参数 bool 表示是否有文本被选中,true 表示有文本被选中,此时可以进行复制操作,false 表示无文本被选中,可用于控制复制功能相关的界面元素的可用性。

2.3 例子1,获取输入框的内容

Qt Designer中设置基本框架,一个QLabel和一个QTextEdit

image-20250130161245882

给QTextEdit设置一个槽函数

void Widget::on_textEdit_textChanged()
{QString text = ui->textEdit->toPlainText();ui->label->setTextFormat(Qt::MarkdownText);ui->label->setText(text);
}

2.4 例子2,使用各种信号

在在Qt Designer中拖入一个QTextEdit。设置槽函数

void Widget::on_textEdit_selectionChanged()
{// 得到当前可见的光标const QTextCursor cursor = ui->textEdit->textCursor();qDebug() << "selectionChanged: "<< cursor.selectedText();
}

image-20250130163957591


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

image-20250130164458759


void Widget::on_textEdit_undoAvailable(bool b)
{qDebug() << "undoAvailable: "<< b;
}void Widget::on_textEdit_redoAvailable(bool b)
{qDebug() << "redoAvailable: "<< b;
}

当输入内容时:undoAvailabletrue,点击撤销后,undoAvailablefalseredoAvailabletrue,点击反撤销后,redoAvailablefalseundoAvailabletrue

image-20250130164924516


void Widget::on_textEdit_copyAvailable(bool b)
{qDebug() << "copyAvailable: "<< b;
}

当选中内容时,copyAvailabletrue

3. QComboBox

QComboBox表示下拉框

2.1 常用属性和方法

属性

属性说明
currentText表示当前在 QComboBox 中被选中的文本内容。通过这个属性可以获取用户当前选择的具体文本信息。
currentIndex当前被选中条目的下标,下标从 0 开始计数。若当前没有任何条目被选中,该属性的值为 -1。可用于定位当前选中项在下拉列表中的位置。
editable控制 QComboBox 是否允许用户对显示的文本进行修改。当设置为 true 时,QComboBox 的行为与 QLineEdit 类似,用户可以直接在输入框中编辑文本,同时也可以为其设置验证器(validator)来限制输入内容的格式。
iconSize用于设置下拉框图标(通常是小三角图标)的大小。可以根据界面设计需求调整该图标的尺寸。
maxCount规定了 QComboBox 下拉列表中最多允许存在的条目数量。当添加的条目数量达到该上限时,将无法再添加更多条目。

方法

方法说明
addItem(const QString&)QComboBox 的下拉列表中添加一个新的条目,参数为要添加条目的文本内容。
currentIndex()获取当前被选中条目的下标,下标从 0 开始计数。如果当前没有任何条目被选中,该方法返回 -1。
currentText()获取当前被选中条目的文本内容。

2.2 常用信号

信号说明
activated(int)
activated(const QString &text)
当用户选择了一个选项时发出。这里的 “选择” 指用户点开下拉框,并且鼠标划过某个选项,但此时用户还未确认做出选择。activated(int) 信号会传递选中选项的索引(从 0 开始计数),activated(const QString &text) 信号会传递选中选项的文本内容。
currentIndexChanged(int) currentIndexChanged(const QString &text)当前选项改变时发出。意味着用户已经明确地选择了一个选项,无论是通过用户手动操作(如鼠标点击、键盘选择等),还是通过程序代码修改当前选项,都会触发这个信号。currentIndexChanged(int) 传递改变后选项的索引,currentIndexChanged(const QString &text) 传递改变后选项的文本内容。
editTextChanged(const QString &text)当编辑框中的文本改变时发出,该信号仅在 editable 属性为 true 时有效。也就是当 QComboBox 处于可编辑状态,用户对输入框内的文本进行编辑修改时,会触发此信号,信号传递当前编辑框内的文本内容。

2.3 例子1,点餐

Qt Designer中设置基本框架

image-20250130175135037

既可以在代码中设置,也可以在Qt Designer中设置下拉框中的条目。右键->编辑项目->编辑组合框->点击+号,添加各种条目

image-20250130175430385

添加一个按钮,给按钮添加槽函数

void Widget::on_pushButton_clicked()
{qDebug() << ui->comboBox->currentText()   << ' '<< ui->comboBox_2->currentText() << ' '<< ui->comboBox_3->currentText() << ' ';
}

image-20250130181657951

2.4 例子2,从文件读取内容

当前目录下有一个food.txt

image-20250131165036776

Qt Designer中设置基本框架

image-20250131172611266

widget.cpp代码如下

#include "widget.h"
#include "ui_widget.h"
#include <fstream>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);std::string content;if(readFile("D:/bit/QT/QTPro/25_1_30QComboBox_2/food.txt", &content) == true) {QString str = QString::fromStdString(content);      // 转成QStringQStringList list = str.split("\r\n");               // 切割, 转成QStringListlist.removeLast();                                  // 删除最后一个空元素ui->comboBox->addItems(list);}
}Widget::~Widget()
{delete ui;
}bool Widget::readFile(std::string path, std::string *outStr)
{std::ifstream file(path, std::ios::binary);if(!file) {qDebug() << "Open file error!";printf("why: %s\n", strerror(errno));return false;}file.seekg(0, std::ios::end);int fileSize = file.tellg();                    // 得到文件的大小file.seekg(0);outStr->resize(fileSize);file.read((char*)outStr->c_str(), fileSize);    // 读取文件内容到outStr中file.close();return true;
}

image-20250131172719595

4. QSpinBox

QSpinBox或者QDoubleSpinBox表示微调框

4.1 常用属性

属性说明
value存储的数值,代表 QSpinBox 当前显示的数值。
singleStep每次调整的 “步长”,即按下一次按钮(上下箭头等)数据变化的量。
displayInteger数字的进制,例如设置为 10 则按照 10 进制表示,设置为 2 则为 2 进制表示。
minimum允许输入的最小值,输入的值不能小于该值。
maximum允许输入的最大值,输入的值不能大于该值。可以使用setRange(int min, int max)同时设置最大值和最小值
suffix后缀,会显示在数值的后面,可用于表示单位等信息。
prefix前缀,会显示在数值的前面,可用于添加特定标识。
wrapping是否允许换行,若设置为 true,当达到最大值时再增加会回到最小值,达到最小值时再减小会回到最大值。
frame是否带边框,设置为 true 显示边框,false 则不显示。
alignment文字对齐方式,可设置水平和垂直方向的对齐,例如左对齐、右对齐、居中对齐等。
readOnly是否允许修改,设置为 true 时,用户无法直接修改输入框内的数值,只能通过按钮进行调整;false 时可正常编辑。
buttonSymbol按钮上的图标样式,有以下几种取值: - UpDownArrows:上下箭头形式。 - PlusMinus:加减号形式。 - NoButtons:没有按钮。
accelerated按下按钮时是否为快速调整模式,设置为 true 时,长按按钮数值会快速变化。
correctionMode输入有误时的修正方式,有以下两种取值: - QAbstractSpinBox::CorrectToPreviousValue:如果用户输入了一个无效的值,SpinBox 会恢复为上一个有效值。 - QAbstractSpinBox::CorrectToNearestValue:如果用户输入了一个无效的值,SpinBox 会恢复为最接近的有效值。
keyboardTrack是否开启键盘跟踪,设置为 true 时,每次在输入框输入一个数字,都会触发一次 valueChanged()textChanged() 信号;设置为 false 时,只有在最终按下 Enter 或者输入框失去焦点,才会触发这两个信号。

4.2 常用信号

信号说明参数
textChanged(QString)文本框内容发生任何变化时触发(无论输入是否合法或最终值是否改变)。QString 类型,代表当前微调框显示的完整文本,包含前缀、数值和后缀。
valueChanged(int)数值实际发生改变时触发(仅当输入内容被解析为有效整数且值变化时触发)。int 类型,表示当前微调框所代表的数值,不包含前缀和后缀信息。

4.3 例子1,饮料个数

Qt Designer中设置基本框架

image-20250131193318851

widget.cpp如下

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->spinBox->setRange(1, 100);ui->spinBox->setSuffix("瓶");ui->spinBox->setWrapping(true);ui->spinBox->setAccelerated(true);
}Widget::~Widget()
{delete ui;
}void Widget::on_spinBox_textChanged(const QString &arg1)
{qDebug() << "textChanged: " << arg1;
}

image-20250131193351351

5. QDateTimeEdit

使用 QDateTimeEdit 作为时间日期的微调框。使用 QDateEdit 作为日期的微调框。使用 QTimeEdit 作为时间的微调框

4.1 常用属性

属性说明
dateTime时间日期的值,格式形如 2000/1/1 0:00:00,可用于获取或设置控件中显示的具体日期和时间。
date单纯日期的值,格式形如 2001/1/1,用于获取或设置控件中显示的日期部分。
time单纯时间的值,格式形如 0:00:00,用于获取或设置控件中显示的时间部分。
displayFormat时间日期格式,通过特定的格式化符号来定义显示样式,例如 yyyy/M/d H:mm。格式化符号含义如下: - y:表示年份 - M:表示月份 - d:表示日期 - H:表示小时 - m:表示分钟 - s:表示秒 不同语言 / 库的设定规则存在差异,使用时需查阅相关文档。
minimumDateTime最小时间日期,限制用户能选择的最早日期和时间,若选择的日期时间早于此值,控件会进行相应调整。
maximumDateTime最大时间日期,限制用户能选择的最晚日期和时间,若选择的日期时间晚于此值,控件会进行相应调整。
timeSpec时间规范,决定控件显示的时间类型,有以下几种取值: - Qt::LocalTime:显示本地时间。 - Qt::UTC:显示协调世界时(UTC)。 - Qt::OffsetFromUTC:显示相对于 UTC 的偏移量(时差)。

4.2 常用信号

信号说明参数
dateChanged(QDate)QDateTimeEdit 中的日期部分发生改变时触发该信号。无论是用户手动输入新日期、通过日期选择器更改日期,还是通过代码修改日期,只要日期发生变化就会触发。QDate 类型,代表当前控件中最新的日期值。
timeChanged(QTime)QDateTimeEdit 中的时间部分发生改变时触发该信号。时间的改变可能是用户手动输入新时间、使用时间调整按钮修改时间,或者通过代码修改时间等情况。QTime 类型,代表当前控件中最新的时间值。
dateTimeChanged(QDateTime)QDateTimeEdit 中的日期或者时间任意一个发生改变时触发该信号。也就是说,只要日期、时间其中之一有变动,或者两者同时变动,都会触发此信号。QDateTime 类型,代表当前控件中最新的日期和时间组合值。

4.3 例子1,计算年龄

Qt Designer中设置基本框架

image-20250131212503447

使用daysTo()secsTo()计算相差的天数和秒数。但是daysTo()

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}int Widget::monthBetween(const QDateTime &start, const QDateTime &end)
{int startYear  = start.date().year();int startMonth = start.date().month();int startDay   = start.date().day();int endYear    = end.date().year();int endMonth   = end.date().month();int endDay     = end.date().day();int monthsDiff = (endYear*12+endMonth) - (startYear*12+startMonth);     // 计算月份差值if(endDay < startDay) {// 如果第二个日期的日小于第一个日期的日,说明还未到完整的一个月,需要将月数差值减 1。monthsDiff--;}return monthsDiff;
}int Widget::yearBetween(const QDateTime &start, const QDateTime &end)
{int startYear  = start.date().year();int startMonth = start.date().month();int startDay   = start.date().day();int endYear    = end.date().year();int endMonth   = end.date().month();int endDay     = end.date().day();int yearsDiff  = endYear - startYear;if(endMonth < startMonth ||(endMonth == startMonth && endDay < startDay)) {// 比较两个日期的月份和日期,如果第二个日期的月份和日期小于第一个日期的月份和日期,那么年份差值需要减 1。yearsDiff--;}return yearsDiff;
}int Widget::daysBetweenFake(const QDateTime &start, const QDateTime &end)
{int year  = yearBetween(start, end);int month = (monthBetween(start, end)) % 12;// 把开始日期加上相差的年数和月数,得到一个临时日期 tempQDateTime tmp = start.addYears(year).addMonths(month);return start.daysTo(end) - start.daysTo(tmp);
}void Widget::on_pushButton_clicked()
{QDateTime d1 = ui->dateTimeEdit->dateTime();QDateTime d2 = ui->dateTimeEdit_2->dateTime();int secs  = d1.secsTo(d2);int hour  = (secs / 3600) % 24;int year  = yearBetween(d1, d2);int month = (monthBetween(d1, d2)) % 12;int days = daysBetweenFake(d1, d2);
//    qDebug() << year << ' ' << month << ' ' << days;QString text = (QString("两日期相差:") + QString::number(year)+QString("年 " + QString::number(month))+QString("月 " + QString::number(days))+QString("日") + QString::number(hour)+QString("小时"));ui->label->setText(text);
}

image-20250131213606743


由于Qt内置的daysTo()在计算不足一天时会算作一天,所以会有下面的情况

image-20250131214843492

显然不符合常理,我们可以自己写一个myDaysTo(),具体实现如下

// 我的daysTo(), 不足一天, 不算一天
int Widget::myDaysTo(const QDateTime &start, const QDateTime &end)
{int secs = start.secsTo(end);return (secs / 86400);      // 一天是86400秒
}

这样就正确了

image-20250131215611225

6. QDial

QDial表示一个旋钮

6.1 常用属性

属性说明
value表示 QDial 持有的当前数值,可通过该属性获取或设置 QDial 所代表的值。
minimumQDial 允许设置的最小值,用户无法将 QDial 的值调整到小于该值。
maximumQDial 允许设置的最大值,用户无法将 QDial 的值调整到大于该值。
singleStep当按下方向键(如上下左右键)时,QDial 的数值改变的步长。例如,设置为 1,则按一次方向键,数值增加或减少 1。
pageStep当按下 PageUpPageDown 键时,QDial 的数值改变的步长。通常该步长会比 singleStep 大,用于快速调整数值。
sliderPosition界面上旋钮显示的初始位置,即 QDial 初始化时旋钮所在的位置,对应的是具体的数值。
tracking决定 QDial 的外观是否会跟踪数值变化。默认值为 true,一般情况下不需要修改。当设置为 true 时,旋钮会随着数值的改变实时移动;设置为 false 时,旋钮可能会在用户操作结束后才更新位置。
wrapping表示是否允许循环调整。若设置为 true,当数值超过最大值时,会回到最小值继续调整;当数值小于最小值时,会回到最大值继续调整,即调整过程可以 “套圈”。若设置为 false,则不允许这种循环调整。
notchesVisible控制是否显示刻度线。设置为 true 时,QDial 会显示刻度线;设置为 false 时,刻度线不会显示。
notchTarget用于设置刻度线之间的相对位置。该数值越大,刻度线越稀疏;数值越小,刻度线越密集。通过调整该属性,可以改变刻度线的显示密度。

6.2 常用信号

信号说明参数
valueChanged(int)QDial 持有的数值发生改变时触发该信号。数值的改变可能是用户通过鼠标拖动旋钮、按下方向键、PageUp/PageDown 键等操作引起的,也可能是通过代码修改 value 属性导致的。int 类型,代表 QDial 当前最新的数值。
rangeChanged(int, int)QDial 的取值范围(即 minimummaximum 属性)发生变化时触发该信号。范围的改变可以通过代码调用 setMinimum()setMaximum() 等方法来实现。两个 int 类型的参数,第一个参数表示新的最小值,第二个参数表示新的最大值。

6.3 例子1,调整窗口不透明度

Qt Designer中设置基本框架

image-20250131231332905

设置槽函数

void Widget::on_dial_valueChanged(int value)
{double n = (double)ui->dial->value() / 100;setWindowOpacity(n);QString text = QString("不透明度:") +QString::number(value);ui->label->setText(text);
}

运行结果如下

image-20250131231434502

7. QSlider

QSlider表示一个滑动条,属性和信号与QDial类似,这两个都继承自QAbstractSlider

7.1 常用属性

属性说明
value滑动条当前持有的数值,可通过编程方式设置或获取,反映滑动条所处位置对应的数值。
minimum滑动条允许设置的最小值,限制了滑动条可到达的最左(水平)或最上(垂直)位置对应的数值。
maximum滑动条允许设置的最大值,限制了滑动条可到达的最右(水平)或最下(垂直)位置对应的数值。
singleStep当按下方向键时,滑动条数值改变的步长。例如设置为 1,按一次方向键,数值增加或减少 1。
pageStep当按下 PageUpPageDown 键时,滑动条数值改变的步长,通常用于快速调整数值,一般比 singleStep 大。
sliderPosition滑动条显示的初始位置,即滑动条在界面初始化时滑块所处的位置,对应着具体的数值。
tracking决定滑动条的外观是否会跟踪数值变化。默认值为 true,意味着滑块会随着数值的改变实时移动;若设置为 false,滑块可能在用户操作结束后才更新位置。一般情况下无需修改此属性。
orientation用于指定滑动条的方向,可设置为水平(Qt::Horizontal)或垂直(Qt::Vertical)。
invertedAppearance若设置为 true,会翻转滑动条的方向。例如水平滑动条,正常是从左到右数值增大,设置后变为从右到左数值增大;垂直滑动条则是从下到上数值增大变为从上到下数值增大。
tickPosition确定刻度的位置,取值有多种: - QSlider::NoTicks:不显示刻度。 - QSlider::TicksAbove(水平)/ QSlider::TicksLeft(垂直):刻度显示在滑动条上方(水平)或左侧(垂直)。 - QSlider::TicksBelow(水平)/ QSlider::TicksRight(垂直):刻度显示在滑动条下方(水平)或右侧(垂直)。 - QSlider::TicksBothSides:刻度显示在滑动条两侧。
tickInterval控制刻度的密集程度,指定相邻两个刻度之间的数值间隔。例如设置为 10,则每隔 10 个数值显示一个刻度。

7.2 常用信号

信号说明参数
valueChanged(int)QSlider 的数值发生改变时触发该信号。数值改变可能是用户拖动滑块、使用键盘方向键、按下 PageUp/PageDown 键,或者通过代码修改 value 属性等操作引起的。int 类型,表示 QSlider 当前的最新数值。
rangeChanged(int, int)QSlider 的取值范围(即 minimummaximum 属性)发生变化时触发该信号。范围的改变通常是通过代码调用 setMinimum()setMaximum()setRange() 方法实现的。两个 int 类型的参数,第一个参数表示新的最小值,第二个参数表示新的最大值。

7.3 例子1,调整窗口大小

Qt Designer中设置基本框架

image-20250201130957835

设置槽函数

// 设置宽度
void Widget::on_horizontalSlider_valueChanged(int value)
{QRect pos = geometry();setGeometry(pos.x(), pos.y(), value, pos.height());
}// 设置高度
void Widget::on_verticalSlider_valueChanged(int value)
{QRect pos = geometry();setGeometry(pos.x(), pos.y(), pos.width(), value);
}

可以通过滑动条调整窗口大小

image-20250201131028689

7.3 例子2,快捷键调整

Qt Designer中设置基本框架

image-20250201142417666

widget.cpp如下

#include "widget.h"
#include "ui_widget.h"
#include <QShortcut>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置快捷键QShortcut* s1 = new QShortcut(this);QShortcut* s2 = new QShortcut(this);s1->setKey(QKeySequence("-"));s2->setKey(QKeySequence("="));// 设置槽函数connect(s1, &QShortcut::activated, this, &Widget::reduceValue);connect(s2, &QShortcut::activated, this, &Widget::addValue);
}void Widget::addValue()
{int value = ui->horizontalSlider->value() + 5;if(value > ui->horizontalSlider->maximum())    return;ui->horizontalSlider->setValue(value);
}void Widget::reduceValue()
{int value = ui->horizontalSlider->value() - 5;if(value < ui->horizontalSlider->minimum())    return;ui->horizontalSlider->setValue(value);
}Widget::~Widget()
{delete ui;
}void Widget::on_horizontalSlider_valueChanged(int value)
{ui->label->setText("当前value:" + QString::number(value));
}

运行结果:可以通过-+调整滑动条

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10923.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型培训讲师老师叶梓分享:DeepSeek多模态大模型janus初探

以下视频内容为叶梓分享DeepSeek多模态大模型janus的部署&#xff0c;并验证其实际效果&#xff0c;包括图生文和文生图两部分。 叶梓老师人工智能培训分享DeepSeek多模态大模型janus初探 DeepSeek 的多模态大模型 Janus 是一款强大的 AI 模型&#xff0c;专注于图像和文本的多…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

17.2 图形绘制7

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 17.2.9 字体 17.2.9.1 Font类 Font类定义特定的文本格式&#xff0c;包括字体、字号和样式特性。 Font常用属性&#xff1a; Na…

浅析DDOS攻击及防御策略

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种通过大量计算机或网络僵尸主机对目标服务器发起大量无效或高流量请求&#xff0c;耗尽其资源&#xff0c;从而导致服务中断的网络攻击方式。这种攻击方式利用了分布式系统的特性&#xff0c;使攻击规模更大、影响范围更广…

90,【6】攻防世界 WEB Web_php_unserialize

进入靶场 进入靶场 <?php // 定义一个名为 Demo 的类 class Demo { // 定义一个私有属性 $file&#xff0c;默认值为 index.phpprivate $file index.php;// 构造函数&#xff0c;当创建类的实例时会自动调用// 接收一个参数 $file&#xff0c;用于初始化对象的 $file 属…

HarmonyOS NEXT:保存应用数据

用户首选项使用 用户首选项的特点 数据体积小、访问频率高、有加载速度要求的数据如用户偏好设置、用户字体大小、应用的配置参数。 用户搜选项&#xff08;Preferences&#xff09;提供了轻量级配置数据的持久化能力&#xff0c;支持订阅数据变化的通知能力。不支持分布式同…

C++编程语言:抽象机制:模板(Bjarne Stroustrup)

目录 23.1 引言和概观(Introduction and Overview) 23.2 一个简单的字符串模板(A Simple String Template) 23.2.1 模板的定义(Defining a Template) 23.2.2 模板实例化(Template Instantiation) 23.3 类型检查(Type Checking) 23.3.1 类型等价(Type Equivalence) …

OVS-DPDK

dpdk介绍及应用 DPDK介绍 DPDK&#xff08;Data Plane Development Kit&#xff09;是一组快速处理数据包的开发平台及接口。有intel主导开发&#xff0c;主要基于Linux系统&#xff0c;用于快速数据包处理的函 数库与驱动集合&#xff0c;可以极大提高数据处理性能和吞吐量&…

基础项目实战——学生管理系统(c++)

目录 前言一、功能菜单界面二、类与结构体的实现三、录入学生信息四、删除学生信息五、更改学生信息六、查找学生信息七、统计学生人数八、保存学生信息九、读取学生信息十、打印所有学生信息十一、退出系统十二、文件拆分结语 前言 这一期我们来一起学习我们在大学做过的课程…

基于微信小程序的医院预约挂号系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

[Linux]从零开始的STM32MP157 U-Boot移植

一、前言 在上一次教程中&#xff0c;我们了解了STM32MP157的启动流程与安全启动机制。我们还将FSBL的相关代码移植成功了。大家还记得FSBL的下一个步骤是什么吗&#xff1f;没错&#xff0c;就是SSBL&#xff0c;而且常见的我们将SSBL作为存放U-Boot的地方。所以本次教程&…

单细胞-第四节 多样本数据分析,下游画图

文件在单细胞\5_GC_py\1_single_cell\2_plots.Rmd 1.细胞数量条形图 rm(list ls()) library(Seurat) load("seu.obj.Rdata")dat as.data.frame(table(Idents(seu.obj))) dat$label paste(dat$Var1,dat$Freq,sep ":") head(dat) library(ggplot2) lib…

高速稳定,功能强大的免费下载工具!!

今天&#xff0c;我向你们介绍一款超强的下载器——破姐版本&#xff0c;它完全免费&#xff0c;支持高速下载&#xff0c;将彻底解决你的下载难题。 01 软件介绍 P2P下载器免费下载工具&#xff0c;它以高速稳定、功能强大、无广告的特点&#xff0c;为你提供卓越的下载体验…

C++:虚函数与多态性习题2

题目内容&#xff1a; 编写程序&#xff0c;声明抽象基类Shape&#xff0c;由它派生出3个派生类&#xff1a;Circle、Rectangle、Triangle&#xff0c;用虚函数分别计算图形面积&#xff0c;并求它们的和。要求用基类指针数组&#xff0c;使它每一个元素指向一个派生类对象。 …

C#,入门教程(10)——常量、变量与命名规则的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(09)——运算符的基础知识https://blog.csdn.net/beijinghorn/article/details/123908269 C#用于保存计算数据的元素&#xff0c;称为“变量”。 其中一般不改变初值的变量&#xff0c;称为常变量&#xff0c;简称“常量”。 无论…

list的使用,及部分功能的模拟实现(C++)

目录&#xff08;文章中"节点"和"结点"是同一个意思&#xff09; 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list…

MySQL 索引

MySQL 索引 文章目录 MySQL 索引1. 索引概念2. 索引结构3. 索引分类4. 索引使用4.1 单列索引和联合索引4.2 覆盖索引4.3 前缀索引 5. SQL提示6. 索引失效情况 1. 索引概念 索引可以理解为MySQL中用来高效检索数据的数据结构&#xff0c;它是有序的&#xff0c;因为它底层使用的…

JVM方法区

一、栈、堆、方法区的交互关系 二、方法区的理解: 尽管所有的方法区在逻辑上属于堆的一部分&#xff0c;但是一些简单的实现可能不会去进行垃圾收集或者进行压缩&#xff0c;方法区可以看作是一块独立于Java堆的内存空间。 方法区(Method Area)与Java堆一样&#xff0c;是各个…

STM32 TIM定时器配置

TIM简介 TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff…

自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

import numpy as np import torch import torch.nn as nn import torch.optim as optim from sklearn.metrics import precision_score, recall_score, f1_score# 数据准备 class1_points np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5],[1.5, 0.9],[0.9, 1.2],[1.1, 1.7],[1.4,…