时间、日期与组合框
- 1 日期时间
- 1.1 日期时间相关的类
- 1.2 日期、时间和字符串的转换
- 1.3 例子
- 2、组合框
- 2.1 QComboBox
- 2.2 QPlainTextEdit
- 2.3 案例
- 3、自定义右键菜单
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出来的对象,需要释放掉
}