赞
踩
QString是Qt中的字符串类,使用Unicode编码,而不是ASCII码。在C++中字符使用8位的char类型表示一个字符,但是在Qt中使用16位的QChar表示一个字符。因此Qt处理中文没有任何问题,并且一个汉字算作一个字符。
QString类整体使用与std::string类似,但是在API上有所不同。
常用函数如下:
●QString QString::number(int n, int base = 10) [static]
数字→字符串
参数1:要转换的数字
参数2:进制
●QString & QString::setNum(int n, int base = 10)
数字→字符串,支持链式调用
参数1:要转换的数字
参数2:进制
●int QString::toInt(bool * ok = 0, int base = 10) const
字符串→数字
参数1:转换的结果,成功或失败
参数2:进制
返回值:转换的结果,数字;如果失败,返回0。
dialog.cpp
#include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); QString str = "你好吗αβγāáǎàあいうㅞㅝ"; qDebug() << str.size(); for(int i=0;i<str.size();i++) { qDebug() << str.at(i); } // 判断字符串是否为空 qDebug() << str.isEmpty(); str.append("fdf"); qDebug() << str; // 基于16进制转换 int i = 16; qDebug() << QString::number(i,16); // 支持链式调用的转换 qDebug() << str.setNum(255,16).prepend("0x"); str = "0"; bool result; // 转换成功或失败的结果 // QString → int int m = str.toInt(&result,10); if(result) qDebug() << "转换成功:" << m; else qDebug() << "转换失败:" << m; } Dialog::~Dialog() { delete ui; }
由于QString类函数众多,无需死记每个函数,只需要把常用的函数单词记住,随用随查即可。
自定义一个C++类,作为QList的元素类型。
下面是创建自定义的C++类的步骤:
1. 在Qt Creator中选中项目名称,鼠标右键,点击“添加新文件”。
2. 在弹出的窗口中,按照下图所示进行操作。
3. 在弹出的窗口中,输入类名后点击“下一步”。
4. 在项目管理界面,直接点击“完成”。可以看到项目中多了新创建的类的头文件和源文件。
需要注意的是,QStringList类型基本等同QList
dialog.cpp代码
#include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); QMap<QString,QString> map; // 增加元素 map["姓名"] = "张三"; map["年龄"] = "22岁"; map.insert("地址","济南市高新区"); // Qt的容器类型,如果元素类型支持输出 // 则可以直接输出容器对象 qDebug() << map; // 取出元素之前先判断一下此键值对是否存在 if(map.contains("姓名")) { // 修改 map["姓名"] = "李四"; qDebug() << map["姓名"]; } // 删除 // 失败返回0 int result = map.remove("地址"); if(result == 0) qDebug() << "移除失败"; else qDebug() << "移除成功"; // 也可以使用下面的方式取出元素,无需判断 // 参数1:键 // 参数2:取出失败的默认值 QString value = map.value("地址","404"); qDebug() << value; qDebug() << "------STL迭代------"; for(QMap<QString,QString>::const_iterator iter = map.begin(); iter != map.end();iter++) { // 分别取出键和值 qDebug() << iter.key() << iter.value(); } qDebug() << "---------Java迭代---------"; // 读写 QMutableMapIterator<Key, T> // 只读 QMapIterator<Key, T> QMapIterator<QString, QString> iter(map); while(iter.hasNext()) { iter.next(); // 向后移动 // 分别取出键和值 qDebug() << iter.key() << iter.value(); } } Dialog::~Dialog() { delete ui; }
Qt是一个跨平台的开发框架,为了确保在各个平台上的数据类型具有同一的长度,Qt为各种常用的基本数据类型定义了类型符号。
Qt拥有若干时间和日期相关类型,本次使用QDateTime类进行讲解。
QDateTime类常用函数如下所示。
●qint64 QDateTime::currentMSecsSinceEpoch() [static]
返回1970年1月1日 0点0分0秒到现在的毫秒数
●QDateTime QDateTime::currentDateTime() [static]
返回一个基于当前时区的时间和日期信息的QDateTime对象
●QString QDateTime::toString(const QString & format) const
返回一个自定义格式的时间日期字符串
参数是自定义的时间和日期格式。
时间和日期相关组件:
dialog.cpp代码
#include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { qint64 start = QDateTime::currentMSecsSinceEpoch(); ui->setupUi(this); // 创建ui界面文件中的组件对象 qDebug() << QDateTime::currentMSecsSinceEpoch()-start; // 可以使用上面的时间戳作为随机数的种子 qsrand(start); // 生成一个1-10的随机数 int rand = qrand()%10+1; qDebug() << rand; // 获取一个当前的QDateTime对象 QDateTime dt = QDateTime::currentDateTime(); // 获得一个自定义格式的时间和日期字符串 QString time = dt.toString("yyyy-MM-dd hh:mm:ss"); qDebug() << time; connect(ui->dateTimeEdit,SIGNAL(dateTimeChanged(QDateTime)), this,SLOT(dtChangedSlot(QDateTime))); } Dialog::~Dialog() { delete ui; } void Dialog::dtChangedSlot(QDateTime dt) { QString time = dt.toString("yyyy-MM-dd hh:mm:ss"); qDebug() << "组件当前数值:" << time; }
dialog.h代码
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> // 头文件 #include <QDateTime> #include <QDebug> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); private: Ui::Dialog *ui; private slots: // 组件数值变化发射 void dtChangedSlot(QDateTime); }; #endif // DIALOG_H
定时器类QTimer主要有两个功能:
●周期性执行某个动作
●延迟一段时间后执行某个动作
QTimer类与之前的QButtonGroup一样,需要手动控制堆内存对象的创建和销毁。
QTimer的常用属性如下所示。
●interval : int
如果是一次性的定时器,此属性表示延迟执行的时间;
如果是周期性的定时器,此属性表示间隔执行的时间。
时间单位毫秒。
●singleShot : bool
此属性表示定时器是否是一次性,如果不是一次性就是周期性。
QTImer的常用函数如下所示。
●void QTimer::start() [slot]
开始或重新开始定时器,如果定时器已经在运行,则会停止运行后再次运行。
●void QTimer::stop() [slot]
停止运行
●void QTimer::timeout() [signal]
定时器出发时发射的信号
dialog.cpp代码
#include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); // 0 timeoutSlot(); // 手动刷新时间显示 // 创建定时器对象 timer = new QTimer(this); // 设置间隔时间为1s timer->setInterval(1000); // 设置定时器为周期性 timer->setSingleShot(false); // 连接定时器触发信号槽,注意发射者对象创建的时间 connect(timer,SIGNAL(timeout()),this,SLOT(timeoutSlot())); // 启动定时器 timer->start(); } Dialog::~Dialog() { if(timer->isActive()) // 如果定时器正在运行 timer->stop(); // 停止定时器运行 delete timer; delete ui; } void Dialog::timeoutSlot() { // 获取当前时间 QString time = QDateTime::currentDateTime().toString("hh:mm:ss"); // 给QLCDNumber对象设置显示内容 ui->lcdNumber->display(time); }
dialog.h代码
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> // 定时器头文件 #include <QTimer> #include <QDateTime> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); private: Ui::Dialog *ui; // 定时器对象 QTimer* timer; private slots: // 触发信号连接的槽函数 void timeoutSlot(); }; #endif // DIALOG_H
QDialog是一个对话框窗口类,Qt为了方便程序员调用各种功能的对话框窗口,预设了很多QDialog的派生类,这些派生类分别应用于不同的场景。
这些派生类往往都通过一个静态成员函数调用,通常不需要使用构造函数创建对象。根据不同窗口的功能,这些静态函数会提供当前窗口的信息作为返回值。
QMessageBox是一个用于展示信息或询问用户一个问题的模态对话框,预设的类型有四种:
展示QMessageBox的静态成员函数如下所示。
函数名称可以更换为question、information、warning。
参数1:父对象
参数2:窗口标题
参数3:窗口信息
返回值:用户在弹窗中点击的按钮
QWidget类本身也可以创建对象,其构造函数如下所示。
●QWidget::QWidget(QWidget * parent = 0)
如果parent参数使用默认值,QWidget对象就是一个独立的窗口;
如果parent参数不使用默认值,QWidget对象会成为其父窗口对象内部的组件。
QMainWidow类通常作为主窗口,因为此类可以增加菜单栏、工具栏、状态栏等。
QWidget类内部也有一些所有的窗口类共有的成员,例如:
●windowTitle : QString
窗口标题
●windowFlags : Qt::WindowFlags
窗口标记
●void QWidget::setWindowState(Qt::WindowStates windowState)
设置窗口状态
widget.cpp代码
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // 全屏显示 // setWindowState(Qt::WindowFullScreen); // 设置窗口标题 // setWindowTitle("哈哈哈哈哈"); // 设置无边框+上层浮动窗口 setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint); } Widget::~Widget() { delete ui; }
QMainWindow作为窗口类,包含以下几个部分:
QMenuBar作为菜单栏,内部可以包含若干个菜单QMenu。
QMenu作为菜单,内部可以放置直接触发的QAction对象,也可以继续放置子菜单QMenu,形成二级或多级折叠的菜单。
上面的对象都是肉眼可见的,因此都属于ui指针管理。
QAction的常用信号如下所示。
●void QAction::hovered() [signal]
当鼠标悬停在QAction上发射此信号。
●void QAction::triggered(bool checked = false) [signal]
QAction直接或间接点击触发后发射的信号。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。