5-时间、日期与组合框

1 日期时间

1.1 日期时间相关的类

  • QTime
    • 时间数据类型,仅表示时间,如:15:23:20
  • QDate类
    • 日期数据类型,仅表示日期,如:2025-05-25
  • QDateTime
    • 日期时间数据类型,表示日期和时间,如:2025-05-25 15:23:20

1.2 日期、时间和字符串的转换

  • 日期时间类型转换成字符串
    • QString toString(const QString &format)const
  • 字符串转换成日期时间
    • QTimeQTime::fromString(const QString &string,const QString &format)
    • QDate QDate::fromString(const QString &string,const QString &format)
    • QDateTime QDateTime::fromString(const QString &string,const QString &format)
  • 转换的日期格式和时间格式
格式符号含义
d
dd
没有前导零的日期(131)<br>有前导零的日期(0131)
ddd
dddd
本地日期名缩写(如:MonSun)<br>本地日期名(如:MondaySunday)
M
MM
没有前导零的月份(112)<br>有前导零的月份(0112)
MMM
MMMM
本地月份名称缩写(如:JanDec)<br>本地月份名称(如:JanuaryDecember)
yy
yyyy
两位数字的年份(00~99)
四位数字的年份
h
hh
H
HH
没有前导零的小时(0to23or1to12ifAM/PM display)
有前导零的小时(00to23or01to12ifAM/PM display)
没有前导零的小时(Oto23,even with AM/PM display)
有前导零的小时(0to23,even with AM/PM display)
m
mm
没有前导零的分钟(059)<br>有前导零的分钟(0059)
s
ss
没有前导零的秒(059)<br>有前导零的秒(0059)
Z
ZZZ
没有尾随零的毫秒(0999)<br>有尾随零的毫秒(000999)
AP or A
ap or a
显示AM/PM(大写)
显示am/pm(小写)

1.3 例子

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    // 序列化
    QDateTime dateTime= QDateTime::currentDateTime();
    QString str = dateTime.toString("yyyy:MM:dd h:m:s");
    qDebug()<<str;
    // 反序列化
    // date() - 解析得到日期
    // time() - 解析得到时间
    str = "2024.05.25 10:05:30";
    dateTime = QDateTime::fromString(str,"yyyy.MM.dd HH:mm:ss");
     qDebug()<<dateTime.date().year();
     qDebug()<<dateTime.date().month();
     qDebug()<<dateTime.date().day();
     qDebug()<<dateTime.time().hour();
     qDebug()<<dateTime.time().minute();
     qDebug()<<dateTime.time().second();
    return a.exec();
}

2、组合框

2.1 QComboBox

  • 下拉列表框控件类
  • 提供一个下拉列表共用户选择,也可以直接当作一个QLineEdit用作输入,每个项(item,或称列表项)可以关联一个QVariant类型的变量,用于存储一些不可见数据。
  • 常用函数
void addItem(const QString &text,const QVariant &userData = QVariant())
void addItem(const QIcon &icon,const QString &text,const QVariant &userData = QVariant())
  • 访问
int currentIndex():返回当前项的序号,从0开始
QString currentText():返回当前项的文字
QVariant currentData(int role=Qt::UserRole):返回当前项的关联数据
QString itemText(int index):返回指定索引号的项的文字
QVariant itemData(int index,int role=Qt::UserRole):返回指定索引号的项的关联数据
int count():返回项的个数
  • 信号
void currentIndexChanged(int index)
void currentIndexChanged(const QString &text)

2.2 QPlainTextEdit

  • 编辑多行文本的编辑框,可以编辑普通文本
  • QPlainTextEdit提供cut()、copy()、paste()、undo()、redo()、clear()、selectAll()等标准功能的槽函数,QPlainTextEdit还提供一个标准的右键快捷菜单
  • QPlainTextEdit常用函数
QPlainTextEdit::appendPlainText(const QString &text)// 添加项字符串
QString QPlainTextEdit::toPlainText() const // 读取所有文字
/* 逐行读取需要使用QTextDocument */
QTextDocument *QPlainTextEdit::document() const
int QTextDocument ::blockCount()
QTextBlock QTextDocument::findBlockByNumber(int blockNumber)

2.3 案例

实现下面的功能
在这里插入图片描述

1:构建ui
在这里插入图片描述

2:实现的功能

/* 简单组合框 */
// 初始化
void ComboboxDialog::on_m_btnInit_clicked()
{
    ui->m_comboSimple->addItem("无图标选项");
    ui->m_comboSimple->addItem(QIcon(":/images/aim.ico"),"有图标的选项");
}
// 清空
void ComboboxDialog::on_m_btnClear_clicked()
{
    ui->m_comboSimple->clear();//将组合框清空
}
// 可编辑
void ComboboxDialog::on_m_checkEditable_clicked(bool checked)
{
    ui->m_comboSimple->setEnabled(checked);
}
// combox
void ComboboxDialog::on_m_comboSimple_currentIndexChanged(const QString &arg1)
{
    if(!arg1.isEmpty()){
        ui->m_plainTextEdit->appendPlainText(arg1);
    }
}
/* 用户数据组合框 */
// 添加
void ComboboxDialog::on_m_btnAdd_clicked()
{
    QMap<QString,int>cityZone;
    cityZone["北京"]=10;
    cityZone["上海"]=11;
    cityZone["南京"]=13;
    for (QMap<QString,int>::iterator it=cityZone.begin();it!=cityZone.end();it++) {
        ui->m_comboUserData->addItem(it.key(),it.value());
    }
}
// combox
void ComboboxDialog::on_m_comboUserData_currentIndexChanged(const QString &arg1)
{
    if(!arg1.isEmpty()){
        QVariant zone = ui->m_comboUserData->currentData();
        ui->m_plainTextEdit->appendPlainText(arg1+"的区号是:"+zone.toString());
    }
}
/* 编辑组合框 */
 
// 追加
void ComboboxDialog::on_m_btnAppend_clicked()
{
    // 获取当前文本对象信息
    // 后序可以从该对象指针中获取文本对应的属性
    QTextDocument* qc = ui->m_plainTextEdit->document();
    int blockCount= qc->blockCount();
    for(int i=0;i<blockCount;i++){
        // 获取第i行的文本块
        ui->m_comboSimple->addItem(qc->findBlockByNumber(i).text());
    }
}
// 擦除
void ComboboxDialog::on_m_btnErase_clicked()
{
    ui->m_plainTextEdit->clear();
}
// 只读
void ComboboxDialog::on_m_checkReadOnly_clicked(bool checked)
{
    ui->m_plainTextEdit->setReadOnly(checked);
}

3、自定义右键菜单

  • contextMenuPolicy属性
    • Qt::DefaultContextMenu
    • Qt::CustomContextMenu
  • 信号
    • void customContextMenuRequested(const QPoint &pos)
  • 添加自定义右键菜单的步骤
    • contextMenuPolicy :Qt::CustomContextMenu
    • 处理信号customContextMenuRequested(const QPoint &pos)
    • 在槽函数中:
      1> 创建菜单:QMenu* menu = new QMunu;
      2> 添加菜单项:void addAction(QAction* action)
      3> 显示菜单:QAction* exec(const QPoint &p)
// 右键菜单
void ContexMenuDialog::on_ContexMenuDialog_customContextMenuRequested(const QPoint &pos)
{
    Q_UNUSED(pos);
    // 创建菜单
    QMenu* menu = new QMenu;
    // 添加菜单项
    menu->addAction(ui->m_actAbout);
    menu->addSeparator();// 添加分隔符
    menu->addAction(ui->m_actExit);
    // 显示菜单
    menu->exec(QCursor::pos());
    delete menu;// 自己new出来的对象,需要释放掉
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

启航zpyl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值