【QT】时间日期与定时器

目录

1.时间日期相关的类

2.日期时间数据与字符串之间的转换

2.1 时间、日期编辑器属性设置

2.2 日期时间数据的获取与转换为字符串

2.3 字符串转换为日期时间

3.QCaIendarWidget日历组件

3.1基本属性

3.2 公共函数

3.3 信号

4.实例程序演示时间日期与定时器的使用

1.时间日期相关的类

时间日期是经常遇到的数据类型,Qt中时间日期类型的类如下。
  • QTime:时间数据类型,仅表示时间,如巧:23:13。
  • QDate:日期数据类型,仅表示日期,如2017一4巧。
  • QDateTime:日期时间数据类型,表示日期和时间,如2017.03一2308:12:43。
Qt中有专门用于日期、时间编辑和显示的界面组件,介绍如下。
  • QTimeEdit:编辑和显示时间的组件。
  • QDateEdit:编辑和显示日期的组件。
  • QDateTimeEdit:编辑和显示日期时间的组件。
  • QCaIendarWidget:一个用日历形式选择日期的组件。
定时器类是QTimer:
定时器是用来处理周期性事件的一种对象,类似于硬件定时器。例如设置一个定时器的定时
周期为1000亳秒,那么每1000毫秒就会发射定时器的timeout()信号,在信号关联的槽函数里就
可以做相应的处理。Qt中的定时器类是QTimer,它直接从QObject类继承而来,不是界面组件类。

2.日期时间数据与字符串之间的转换

2.1 时间、日期编辑器属性设置

QDateEdit和QTimeEdit都从QDateTimeEdit继承而来,实现针对日期或时间的特定显示功
能。实际上,QDateEdit和QTimeEdit的显示功能都可以通过QDateTimeEdit实现,只需设置好
属性即可。
QDateTimeEdit类的主要属性的介绍如下。
  • datetime:日期时间。
  • date:日期,设置datetime时会自动改变date,同样,设置date时,也会自动改变datetime
  • 里的日期。
  • time:时间,设置datetime时会自动改变time,同样,设置time时,也会自动改变datetime
  • 里的时间。
  • maximumDateTime、minimumDateTime:最大、最小日期时间。
  • maximumDate、minimumDate:」最丿(、最刁、日其月。
  • maximumTime、minimumTime:最大、最小时间。
  • currentsection:当前输入光标所在的时间日期数据段,是枚举类型QDateTimeEdit::Section。
QDateTimeEdit显示日期时间数据时分为多个段,单击编辑框右侧的上下按钮可修改当前段的               值。如输入光标在Yearsection段,就修改“年”的值。
  • currentsectionlndex:用序号表示的输入光标所在的段。
  • calendarPopup:是否允许弹出一个日历选择框。当取值为true时,右侧的输入按钮变成与
  • QComboBox类似的下拉按钮,单击按钮时出现一个日历选择框,用于在日历上选择日期。对于QTimeEdit,此属性无效。
  • displayFormat:显示格式,日期时间数据的显示格式,例如设置为“yyyy-MM-dd HH:mm:ss”,一个日期时间数据就显示为“2016-11-02 08:23:46”。

2.2 日期时间数据的获取与转换为字符串

void Dialog::on_btnGetTime_clicked()
{//获取当前日期时间,为三个专用编辑器设置日期时间数据,并转换为字符串QDateTime curDateTime=QDateTime::currentDateTime(); //读取当前日期时间ui->timeEdit->setTime(curDateTime.time()); //设置时间ui->editTime->setText(curDateTime.toString("hh:mm:ss"));//转换为字符串显示ui->dateEdit->setDate(curDateTime.date());//设置日期ui->editDate->setText(curDateTime.toString("yyyy-MM-dd"));//转换为字符串显示ui->dateTimeEdit->setDateTime(curDateTime);//设置日期时间ui->editDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));//转换为字符串显示
}
QDateTIME::toString()函数的函数原型是:
QString QDateTime::toString(const QString &format) const
它将日期时间数据按照format指定的格式转换为字符串。format是一个字符串,包含一些特
定的字符,表示日期或时间的各个部分,表4-2是用于日期时间显示的常用格式符。
在设置日期时间显示字符串格式时,还可以使用填字符,甚至使用汉字。例如,日期显示格
式可以设置为:curDateTime.toString("yyyy年MM月dd日");这样得到的字符串是“2016年11月21日”。

2.3 字符串转换为日期时间

同样的,也可以将字符串转换为QTime、QDate或QDateTime类型,使用静态函数QDateTime::fromString(),其函数原型为:
QDateTime  QDateTime::fromString(const QString &string,const QString &format)
其中,第1个参数string是日期时间字符串形式,第2个参数format是字符串表示的格式,
按照表4-2的格式字符定义。
void Dialog::on_btnSetDateTime_clicked()
{//字符串转换为 QDateTimeQString str=ui->editDateTime->text();//读取字符串表示的日期str=str.trimmed();//去掉空格if (!str.isEmpty()){//这里将字符串str按照格式"yyyy-MM-ddhh:mm:ss"转换为日期时间变量,格式是指字符串str所表示的日期时间的格式。QDateTime datetime=QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss"); //从字符串转换为 QDateTimeui->dateTimeEdit->setDateTime(datetime);//设置日期时间}
}

3.QCaIendarWidget日历组件

QCalendarWidget一次显示一个日历月,并允许用户选择一个日期。

QCalendarWidget有一个信号selectionChanged(),在日历上选择的日期变化后会发射此信号,

为此信号创建槽函数,编写代码如下:

void Dialog::on_calendarWidget_selectionChanged()
{ //在日历上选择日期QDate dt=ui->calendarWidget->selectedDate(); //读取选择的日期时间QString str=dt.toString("yyyy年M月d日");//转换为字符串ui->editCalendar->setText(str); //字符串显示日期
}

3.1基本属性

1、dateEditEnabled
该属性表示是否使用一个弹出框来选择当前选中时间,按下非修饰键(空格、字母等)会弹出一个日期编辑框,如果按下的是数字,弹窗并认为按下的数字为输入,弹窗的小部件类似于QDateEdit,修改之后会在一定的延迟dateEditAcceptDelay之后生效。
bool isDateEditEnabled() const
void setDateEditEnabled(bool enable)
2、dateEditAcceptDelay
该属性表示,在dateEditEnabled为true的情况下,弹窗小部件编辑结束之后延迟多久生效,参数为毫秒ms。
int dateEditAcceptDelay() const
void setDateEditAcceptDelay(int delay)
3、firstDayOfWeek
该属性表示每周的第一天是周几。
Qt::DayOfWeek firstDayOfWeek() const
void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)

Qt::DayOfWeek

描述

Qt::Monday

周一

Qt::Tuesday

周二

Qt::Wednesday

周三

Qt::Thursday

周四

Qt::Friday

周五

Qt::Saturday

周六

Qt::Sunday

周日

4、gridVisible

        该属性表示是否显示表格线,默认为false不显示。

bool isGridVisible() const

void setGridVisible(bool show)

5、horizontalHeaderFormat

        该属性表示水平标题的格式。

        SingleLetterDayNames:显示单个字母,比如M表示Monday,中文只会显示周,而不是一、二、三这样,是有bug的,所以该格式只适用于英文。

        ShortDayNames:显示简称名,比如英文Mon表示Monday,中文周一表示星期一。

        LongDayNames:显示全称,比如英文Monday,中文星期一。

        NoHorizontalHeader:不显示水平标题。

HorizontalHeaderFormat horizontalHeaderFormat() const

void setHorizontalHeaderFormat(HorizontalHeaderFormat format)

6、verticalHeaderFormat

        该属性表示垂直标题的格式,默认为ISOWeekNumbers显示为一年中的第几周,还有一种NoVerticalHeader不显示。

VerticalHeaderFormat verticalHeaderFormat() const

void setVerticalHeaderFormat(VerticalHeaderFormat)

7、maximumDate

        该属性表示日历可选择的最大日期,如果设置了最大日期,而选择日期大于最大日期,那么当前日期会被调整。如果使用setSelectedDate选择日期大于最大日期,那么不会生效。

QDate maximumDate() const

void setMaximumDate(const QDate &date)

8、minimumDate

        该属性表示日期可选择的最小日期,效果参照maximumDate。

QDate minimumDate() const

void setMinimumDate(const QDate &date)

9、navigationBarVisible

        该属性表示导航是否显示,默认为true,下个月、上个月、月选择、年选择可视。

bool isNavigationBarVisible() const

void setNavigationBarVisible(bool visible)

10、selectedDate

        该属性表示当前选择的日期,设置不可超出最大值maximumDate和最小值minimumDate范围,否则无效。

QDate selectedDate() const

void setSelectedDate(const QDate &date)

11、selectionMode

        该属性表示用户选择日期的策略。

        默认为SingleSelection,用户可以通过鼠标或者键盘在范围内进行日期的选择。

        还有一种是NoSelection,用户不能选择日期,但是依然可以通过程序selectedDate去选择。

SelectionMode selectionMode() const

void setSelectionMode(SelectionMode mode)

3.2 公共函数

1)dateTextFormat

        获取文本格式,使用QTextCharFormat封装,类包含文本字体属性、布局属性等内容。可返回每个日期的文本格式,使用一个QMap保存每个日期对应的格式,这样Map内容很大,不建议这么干,尽量使用第二个。

QMap<QDate, QTextCharFormat> dateTextFormat() const

QTextCharFormat dateTextFormat(const QDate &date) const

       设置文本格式,使用QTextCharFormat封装,类包含文本字体属性、布局属性等内容。

void setDateTextFormat(const QDate &date, const QTextCharFormat &format)

2)monthShown

        获取当前显示的月份。

int monthShown() const

3)yearShown

        获取当前显示的年份。

int yearShown() const

4)weekdayTextFormat

        获取显示日期的文本格式,参考dateTextFormat

QTextCharFormat weekdayTextFormat(Qt::DayOfWeek dayOfWeek) const

       设置日期显示的文本格式,参考dateTextFormat

void setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format)

5)setCurrentPage

        设置当前要显示年和月,类似setSelectedDate。

void setCurrentPage(int year, int month)

6)setDateRange

        设置当前可选日期的范围,相当于setMaximumDate和setMinimumDate。

void setDateRange(const QDate &min, const QDate &max)

7)showNextMonth

        主动显示下个月。

void showNextMonth()

8)showNextYear

        主动显示下一年。

void showNextYear()

9)showPreviousMonth

        主动显示上个月。

void showPreviousMonth()

10)showPreviousYear

        主动显示上一年。

void showPreviousYear()

11)showSelectedDate

        主动显示当前选择的日期,比如你主动showPreviousMonth显示了上个月,在没有重新选中日期的情况下,使用此函数可以回到当前选择的日期,当然也可以记住选择,用setSelectedDate回到过去。

void showSelectedDate()

  12)showToday

        主动显示系统日期。

void showToday()

3.3 信号

1)activated

        用户按下RETURN键、Enter键或者双击日历的时候触发,得到当前选择的时间。

void activated(const QDate &date)

2)clicked

        用户点击选择时间的时候触发,但是如果用户点击的区域超出范围,或者用户设置选择策略selectionMode为NoSelection,那么不会触发。

void clicked(const QDate &date)

3)currentPageChanged

        当前页改变的时候触发,得到新页的年份和月份。

void currentPageChanged(int year, int month)

4)selectionChanged

        当前选择的日期改变的时候触发,用户可以通过鼠标、键盘或者setSelectedDate改变当前选择的时间。

void selectionChanged()

4.定时器的使用

Qt中的定时器类是QTimeroQTimer不是一个可见的界面组件,在UI设计器的组件面板里

找不到它。

实例程序实现了一个计时器的功能,就是计算定时器开始到停止持续的时间长度,计

时器是QTime类。

QTimer主要的属性是interval,是定时中断的周期,单位毫秒。QTimer主要的信号是timeout(),

在定时中断时发射此信号,要想在定时中断里做出响应,这就需要编写timeout()信号的槽函数。

下面是窗口类中增加的定义(省略了其他不相关的定义):

class Dialog:public QDialog
{
private:QTimer *fTimer;//义了一个定时器fTimerQTime fTimeCounter;//计时器
private slots:void on_timer_timeout();//定时溢出处理槽函数,作为定时器的timeout()信号的响应槽函数。
};

需要在窗口类的构造函数里创建定时器,并进行信号与槽的关联。代码如下:

Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);fTimer=new QTimer(this);  //创建定时器fTimer->stop();fTimer->setInterval(1000);//设置定时周期,单位:毫秒connect(fTimer,SIGNAL(timeout()),this,SLOT(on_timer_timeout())); //关联定时器的信号与槽
}

槽函数on_timer_timeout()的实现代码如下:

void Dialog::on_timer_timeout()
{ //定时器中断响应槽函数QTime curTime=QTime::currentTime(); //获取当前时间ui->LCDHour->display(curTime.hour()); //显示  小时ui->LCDMin->display(curTime.minute());//显示  分钟ui->LCDSec->display(curTime.second());//显示  秒int va=ui->progressBar->value(); //读取progressBar的数值va++;if (va>100)va=0;ui->progressBar->setValue(va); //设置progressBar的数值
}

这段代码首先用QTime类的静态函数Qtime::currentTime()获取当前时间,然后用QTime的成

员函数hour()、minute()、second()分别获取小时、分钟、秒,并在几个LCDNumber组件上显示。

循环更新的值,是为了让界面有变化,表示定时器在运行。

设置定时器的周期,只需调用Qtimer::setlnterval()函数即可。

QTimer::start()函数用于启动定时器,界面上的“开始”按钮代码如下:

void Dialog::on_btnStart_clicked()
{fTimer->start();//定时器开始工作fTimeCounter.start();//计时器开始工作
//更新各按键的状态ui->btnStart->setEnabled(false);ui->btnStop->setEnabled(true);ui->btnSetIntv->setEnabled(false);
}

计时器fTimeCounter执行start()是将当前时间作为计时器的时间。

QTimer::stop()函数停止定时器,界面上的“停止”按钮可实现这一功能,其代码如下:

void Dialog::on_btnStop_clicked()
{fTimer->stop(); //定时器停止int tmMsec=fTimeCounter.elapsed();//毫秒数int ms=tmMsec%1000; //余数毫秒int sec=tmMsec/1000; //整秒QString str=QString::asprintf("流逝时间:%d 秒,%d 毫秒",sec,ms);ui->LabElapsTime->setText(str); //显示流逝的时间ui->btnStart->setEnabled(true); //更新按键状态ui->btnStop->setEnabled(false);ui->btnSetIntv->setEnabled(true);
}

4.实例程序演示时间日期与定时器的使用

(1)main.cpp文件

#include "dialog.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();return a.exec();
}

(2)dialog.h文件

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QTimer>
#include <QTime>namespace Ui {
class Dialog;
}class Dialog : public QDialog
{Q_OBJECT
private:QTimer *fTimer;  //定时器QTime   fTimeCounter;//计时器public:explicit Dialog(QWidget *parent = 0);~Dialog();private slots:void on_timer_timeout(); //定时器中断处理槽函数,手工定义void on_btnGetTime_clicked();//读取当前时间void on_calendarWidget_selectionChanged(); //Calender 选择日期void on_btnSetTime_clicked();  // 读取当前日期时间  按键void on_btnSetDate_clicked(); //设置日期  按键void on_btnSetDateTime_clicked();   //设置日期时间案件void on_btnSetIntv_clicked();   //设置周期  按键void on_btnStart_clicked();  //开始 定时器 按键void on_btnStop_clicked();      //停止定时器按键private:Ui::Dialog *ui;
};#endif // DIALOG_H

(3)dialog.cpp文件

#include "dialog.h"
#include "ui_dialog.h"#include    <QDateTime>
#include    <QString>Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);fTimer=new QTimer(this);  //创建定时器fTimer->stop();fTimer->setInterval(1000);//设置定时周期,单位:毫秒connect(fTimer,SIGNAL(timeout()),this,SLOT(on_timer_timeout())); //关联定时器的信号与槽
}Dialog::~Dialog()
{
//    delete fTimer;delete ui;
}void Dialog::on_timer_timeout()
{ //定时器中断响应槽函数QTime curTime=QTime::currentTime(); //获取当前时间ui->LCDHour->display(curTime.hour()); //显示  小时ui->LCDMin->display(curTime.minute());//显示  分钟ui->LCDSec->display(curTime.second());//显示  秒int va=ui->progressBar->value(); //读取progressBar的数值va++;if (va>100)va=0;ui->progressBar->setValue(va); //设置progressBar的数值
}void Dialog::on_btnGetTime_clicked()
{ //获取当前日期时间,为三个专用编辑器设置日期时间数据,并转换为字符串在LineEdit里显示QDateTime curDateTime=QDateTime::currentDateTime(); //读取当前日期时间ui->timeEdit->setTime(curDateTime.time()); //设置时间ui->editTime->setText(curDateTime.toString("hh:mm:ss"));//转换为字符串显示ui->dateEdit->setDate(curDateTime.date());//设置日期ui->editDate->setText(curDateTime.toString("yyyy-MM-dd"));//转换为字符串显示ui->dateTimeEdit->setDateTime(curDateTime);//设置日期时间ui->editDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));//转换为字符串显示//    ui->LabDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));
}void Dialog::on_calendarWidget_selectionChanged()
{ //在日历上选择日期QDate dt=ui->calendarWidget->selectedDate(); //读取选择的日期时间QString str=dt.toString("yyyy年M月d日");//转换为字符串ui->editCalendar->setText(str); //字符串显示日期
}void Dialog::on_btnSetTime_clicked()
{ //字符串转换为QTimeQString str=ui->editTime->text(); //读取字符串表示的时间//    str=str.trimmed();//去掉空格if (!str.isEmpty()){QTime tm=QTime::fromString(str,"hh:mm:ss"); //从字符串转换为QTimeui->timeEdit->setTime(tm); //设置时间}
}void Dialog::on_btnSetDate_clicked()
{//字符串转换为 QDateQString str=ui->editDate->text(); //读取字符串表示的日期
//    str=str.trimmed();//去掉空格if (!str.isEmpty()){QDate dt=QDate::fromString(str,"yyyy-MM-dd");//从字符串转换为 QDateui->dateEdit->setDate(dt);//设置日期}
}void Dialog::on_btnSetDateTime_clicked()
{//字符串转换为 QDateTimeQString str=ui->editDateTime->text();//读取字符串表示的日期str=str.trimmed();//去掉空格if (!str.isEmpty()){QDateTime datetime=QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss"); //从字符串转换为 QDateTimeui->dateTimeEdit->setDateTime(datetime);//设置日期时间}
}void Dialog::on_btnSetIntv_clicked()
{ //设置定时器周期fTimer->setInterval(ui->spinBoxIntv->value()); //设置定时器的周期
}void Dialog::on_btnStart_clicked()
{fTimer->start();//定时器开始工作fTimeCounter.start();//计时器开始工作
//更新各按键的状态ui->btnStart->setEnabled(false);ui->btnStop->setEnabled(true);ui->btnSetIntv->setEnabled(false);
}void Dialog::on_btnStop_clicked()
{fTimer->stop(); //定时器停止int tmMsec=fTimeCounter.elapsed();//毫秒数int ms=tmMsec%1000; //余数毫秒int sec=tmMsec/1000; //整秒QString str=QString::asprintf("流逝时间:%d 秒,%d 毫秒",sec,ms);ui->LabElapsTime->setText(str); //显示流逝的时间ui->btnStart->setEnabled(true); //更新按键状态ui->btnStop->setEnabled(false);ui->btnSetIntv->setEnabled(true);
}

(4)运行界面

(5)实例程序附件

        附件详见博客上传资源。

https://download.csdn.net/download/u011671745/88625313

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

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

相关文章

04.HTML其他知识

HTML其他知识 1.HTML实体 介绍 在 HTML 中我们可以用一种特殊的形式的内容&#xff0c;来表示某个符号&#xff0c;这种特殊形式的内容&#xff0c;就是 HTML 实体。比如小于号 < 用于定义 HTML 标签的开始。如果我们希望浏览器正确地显示这些字符&#xff0c;我们必须在…

详解MySQL中一条SQL执行过程

MySQL基本架构 如下图所示&#xff0c;从宏观角度来说MySQL架构可以分为server层和存储引擎层&#xff0c;其中Server层包含如下: 连接器:进行身份认证和权限相关校验。查询缓存:MySQL8.0已废弃&#xff0c;查询缓存主要是用于提高查询效率而加的一层缓存。分析器:对SQL执行动…

别再错过!这些隐藏版小网站,让你大呼过瘾!

今天给大家分享一些摸鱼小网站&#xff0c;再忙也别忘记摸鱼呀~~~ 01、简约时钟 网址&#xff1a;https://dateclock.net/ github&#xff1a;https://github.com/jtheletter/dateclock 这个是github上的一个开源项目&#xff0c;大家可以看到它的全部代码。打开网站就能看到…

法语 Alt 代码表

法语的 Alt 代码表&#xff0c;请参考下图。 输入方法就是按住 Alt 键不松开&#xff0c;然后在小键盘上输入字符&#xff0c;松开 Al 键&#xff0c;计算机就能输出上面的字符了。 西班牙语 Alt 代码表 - 系统容器 - iSharkFly西班牙语 Alt 代码表&#xff0c;请参考下图。 输…

《大模型合规白皮书2023》:为了解大模型立法最新动态和立法趋势提供有价值的参考

本白皮书在我国人工智能法律监管框架下进一步梳理了大模型相关方的合规义务及要点&#xff0c;并展望未来大模型法律监管体系的发展趋势与特征&#xff0c;对政府、企业、社会共建大模型治理体系提出切实建议&#xff0c;从而为社会各界了解大模型立法最新动态和立法趋势提供有…

C++ Qt开发:Slider滑块条组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍Slider滑块条组件的常用方法及灵活运用。 当…

Docker容器:docker推送镜像至Harbor

目录 1、Harbor创建项目 2、进入test项目&#xff0c;查看推送命令 3、在docker服务器上准备一个镜像 4、修改docker客户端配置 5、重启docker服务 6、docker登录Harbor 7、docker镜像推送到Harbor 1、Harbor创建项目 2、进入test项目&#xff0c;查看推送命令 3、在dock…

css3实现动态心电图折线

css3实现动态心电图折线 M&#xff08;moveto&#xff09;&#xff1a;需要两个参数&#xff08;x轴和y轴坐标&#xff0c;移动到的点的x轴和y轴的坐标L&#xff08;lineto&#xff09;&#xff1a;需要两个参数&#xff08;x轴和y轴坐标&#xff09;&#xff0c;它会在当前位置…

挺进云存储,天翼云全新一代XSSD勇立潮头

引言&#xff1a;自研高性能分布式存储引擎LAVA&#xff0c;实现云硬盘持续创新获得新突。 【全球云观察 &#xff5c; 科技热点关注】 作为算力基础设施的基石&#xff0c;云存储的发展一直备受公有云厂商所重视&#xff0c;对拉动云厂商营收规模带来重要价值&#xff0c;就…

微信开发者工具安装教程

文章目录 下载安装包执行安装包 #微信开发者工具安装教程 下载安装包 官网网址 执行安装包 D:\Program Files (x86)\Tencent\微信web开发者工具\dll

联合体(c语言)

1.联合体由一个或多个成员组成&#xff0c;这些成员可以是不同类型&#xff0c;但编译器只为最大的数据成员分配足够的内存空间&#xff0c;所有成员占一个空间&#xff0c;所以联合体也叫共用体&#xff08;可以利用这一点用不同的变量表示同一快空间)&#xff0c;给其中一个成…

Git应用——代码提交规范 feat ,fix ,style

当前使用 feat 增加新功能fix 修复问题/BUGstyle 代码风格相关无影响运行结果的perf 优化/性能提升refactor 重构revert 撤销修改test 测试相关docs 文档/注释chore 依赖更新/脚手架配置修改等workflow 工作流改进ci 持续集成types 类型定义文件更改wip 开发中 别处看到 fea…

椋鸟C语言笔记#26:数据在内存中的存储(大小端字节序)、浮点数的存储(IEEE754)

萌新的学习笔记&#xff0c;写错了恳请斧正。 目录 大小端字节序 什么是大小端 写一个判断大小端的程序 浮点数在内存中的存储&#xff08;IEEE 754规则&#xff09; 引入 存储规则解释 读取规则解释 1.阶码不全为0或全为1&#xff08;规格化数&#xff09; 2.阶码全为…

IDEA Maven项目如何引用本地jar包,并打包发布

jar包位于当前路径下的lib目录中 引入所需要的配置 查看当前jar包的相关信息 包的引入,需要使用到当前包的artifactId, groupId, version 需要到包的/META-INF/maven/ 下面的 pom.xml 文件里面找 在Maven构建项目时&#xff0c;生成的依赖包中的/META-INF/maven目录存放了一些…

【JUC】二十八、synchronized锁升级之偏向锁

文章目录 1、偏向锁出现的背景2、从共享对象的内存结构看偏向锁3、偏向锁的持有4、启动偏向锁5、sleep暂停来启动偏向锁6、偏向锁的撤销7、总体流程8、SinceJava15 偏向锁的废除 1、偏向锁出现的背景 如果一个线程连续几次抢到锁&#xff0c;仍然重复加锁解锁&#xff0c;就会…

【深度学习】注意力机制(六)

本文介绍一些注意力机制的实现&#xff0c;包括MobileVITv1/MobileVITv2/DAT/CrossFormer/MOA。 【深度学习】注意力机制&#xff08;一&#xff09; 【深度学习】注意力机制&#xff08;二&#xff09; 【深度学习】注意力机制&#xff08;三&#xff09; 【深度学习】注意…

产品入门第三讲:Axure产品流程图绘制

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还…

机器人行业数据闭环实践:从对象存储到 JuiceFS

JuiceFS 社区聚集了来自各行各业的前沿科技用户。本次分享的案例来源于刻行&#xff0c;一家商用服务机器人领域科技企业。 商用服务机器人指的是我们日常生活中常见的清洁机器人、送餐机器人、仓库机器人等。刻行采用 JuiceFS 来弥补对象存储性能不足等问题。 值得一提的是&am…

Docker容器如何优雅地访问宿主机网络

# 前言 某些时候&#xff0c;我们会有在容器内容访问宿主机某个服务的需求&#xff0c;比如现在 openai 无法直接访问&#xff0c;需要给项目添加代理&#xff0c;我的 chatgpt-dingtalk (opens new window) 项目支持了通过环境变量指定代理地址。 添加方式如下&#xff1a; …

嵌入式奇妙之旅:Python与树莓派编程深度探索

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在这个数字化的时代&#xff0c;嵌入式系统的应…