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.mzph.cn/news/894356.shtml

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

相关文章

有没有个性化的UML图例

绿萝小绿萝 (53****338) 2012-05-10 11:55:45 各位大虾&#xff0c;有没有个性化的UML图例 绿萝小绿萝 (53****338) 2012-05-10 11:56:03 例如部署图或时序图的图例 潘加宇 (35***47) 2012-05-10 12:24:31 "个性化"指的是&#xff1f; 你的意思使用你自己的图标&…

Go学习:字符、字符串需注意的点

Go语言与C/C语言编程有很多相似之处&#xff0c;但是Go语言中在声明一个字符时&#xff0c;数据类型与其他语言声明一个字符数据时有一点不同之处。通常&#xff0c;字符的数据类型为 char&#xff0c;例如 &#xff1a;声明一个字符 (字符名称为 ch) 的语句格式为 char ch&am…

本地部署 DeepSeek-R1 模型

文章目录 霸屏的AIDeepSeek是什么&#xff1f;安装DeepSeek安装图形化界面总结 霸屏的AI 最近在刷视频的时候&#xff0c;总是突然突然出现一个名叫 DeepSeek 的玩意&#xff0c;像这样&#xff1a; 这样&#xff1a; 这不经激起我的一顿好奇心&#xff0c;这 DeepSeek 到底是个…

断裂力学课程报告

谈谈你对线弹性断裂力学和弹塑性断裂力学的认识 经过对本课程的学习&#xff0c;我首先认识到断裂力学研究的是宏观的断裂问题&#xff0c;而不是研究属于断裂物理研究范围的微观结构断裂机理。断裂力学从材料内部存在缺陷出发&#xff0c;研究裂纹的生成、亚临界拓展&#xff…

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

一、使用pytorch框架实现逻辑回归 1. 数据部分&#xff1a; 首先自定义了一个简单的数据集&#xff0c;特征 X 是 100 个随机样本&#xff0c;每个样本一个特征&#xff0c;目标值 y 基于线性关系并添加了噪声。将 numpy 数组转换为 PyTorch 张量&#xff0c;方便后续在模型中…

高性能消息队列Disruptor

定义一个事件模型 之后创建一个java类来使用这个数据模型。 /* <h1>事件模型工程类&#xff0c;用于生产事件消息</h1> */ no usages public class EventMessageFactory implements EventFactory<EventMessage> { Overridepublic EventMessage newInstance(…

Java线程认识和Object的一些方法ObjectMonitor

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 要对Java线程有整体了解&#xff0c;深入认识到里面的一些方法和Object对象方法的区别。认识到Java对象的ObjectMonitor&#xff0c;这有助于后面的Synchron…

基于YOLO11的肺结节检测系统

基于YOLO11的肺结节检测系统 (价格90) LUNA16数据集 数据一共 1186张 按照8&#xff1a;1&#xff1a;1随机划分训练集&#xff08;948张&#xff09;、验证集&#xff08;118张&#xff09;与测试集&#xff08;120张&#xff09; 包含 nodule 肺结节 1种…

C++ Primer 自定义数据结构

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

《AI大模型开发笔记》DeepSeek技术创新点

一、DeepSeek横空出世 DeepSeek V3 以颠覆性技术架构创新强势破局&#xff01;革命性的上下文处理机制实现长文本推理成本断崖式下降&#xff0c;综合算力需求锐减90%&#xff0c;开启高效 AI 新纪元&#xff01; 最新开源的 DeepSeek V3模型不仅以顶尖基准测试成绩比肩业界 …

数仓实战项目,大数据数仓实战(离线数仓+实时数仓)

1.课程目标 2.电商行业与电商系统介绍 3.数仓项目整体技术架构介绍 4.数仓项目架构-kylin补充 5.数仓具体技术介绍与项目环境介绍 6.kettle的介绍与安装 7.kettle入门案例 这个连线是点击shift键&#xff0c;然后鼠标左键拖动 ctrls保存一下 csv输入配置 Excel输出配置 配置完 …

Spring Web MVC基础第一篇

目录 1.什么是Spring Web MVC&#xff1f; 2.创建Spring Web MVC项目 3.注解使用 3.1RequestMapping&#xff08;路由映射&#xff09; 3.2一般参数传递 3.3RequestParam&#xff08;参数重命名&#xff09; 3.4RequestBody&#xff08;传递JSON数据&#xff09; 3.5Pa…

sobel边缘检测算法

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 Sobel边缘检测算法是一种用于图像处理中的边缘检测方法&#xff0c;它能够突出图像中灰度变化剧烈的地方&#xff0c;也就是边缘。该算法通过计算图像在水平方向和垂直方向上的梯度来检测边缘&#xff0c;梯度值越大…

Google Chrome-便携增强版[解压即用]

Google Chrome-便携增强版 链接&#xff1a;https://pan.xunlei.com/s/VOI0OyrhUx3biEbFgJyLl-Z8A1?pwdf5qa# a 特点描述 √ 无升级、便携式、绿色免安装&#xff0c;即可以覆盖更新又能解压使用&#xff01; √ 此增强版&#xff0c;支持右键解压使用 √ 加入Chrome增强…

分布式数据库架构与实践:原理、设计与优化

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 随着大数据和云计算的快速发展&#xff0c;传统单机数据库已难以满足大规模数据存储和高并发访问的需求。分布式数据库&…

设计模式Python版 桥接模式

文章目录 前言一、桥接模式二、桥接模式示例三、桥接模式与适配器模式的联用 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&…

【C语言】main函数解析

文章目录 一、前言二、main函数解析三、代码示例四、应用场景 一、前言 在学习编程的过程中&#xff0c;我们很早就接触到了main函数。在Linux系统中&#xff0c;当你运行一个可执行文件&#xff08;例如 ./a.out&#xff09;时&#xff0c;如果需要传入参数&#xff0c;就需要…

CSS核心

CSS的引入方式 内部样式表是在 html 页面内部写一个 style 标签&#xff0c;在标签内部编写 CSS 代码控制整个 HTML 页面的样式。<style> 标签理论上可以放在 HTML 文档的任何地方&#xff0c;但一般会放在文档的 <head> 标签中。 <style> div { color: r…

变量的作用域和生命周期

一、根据变量的作用域不同&#xff0c;可分为 局部变量 和 全局变量 1. 作用域&#xff1a;变量起作用的范围&#xff08;变量定义之后&#xff0c;在哪里可以访问变量&#xff09;。 就近原则&#xff1a;当不同作用域里面有两个或者多个同名变量&#xff0c;那么遵循就近原…

力扣【669. 修剪二叉搜索树】Java题解

一开始在想为什么题目说存在唯一答案。然后发现是二叉搜索树就合理了。如下图&#xff1a;如果0节点小于low&#xff0c;那其左子树也都小于low&#xff0c;故可以排除&#xff1b;对于4&#xff0c;其右子树也是可以排除。 代码如下&#xff1a; class Solution {public Tre…