政务服务网站建设文档,wordpress首页是什么意思,网站推广行业,企业网站建设亮点QT 线性容器
点击查看#xff1a;字符和字节的区别#xff0c;ASCII、Unicode 和 UTF-8 编码的区别。#xff08;#x1f448; 安全链接#xff0c;放心跳转#xff09;
QByteArray 思考#xff1a;char buf[6] “hello”; 如果 C 语言中要利用 buf 内容重新生成 “…QT 线性容器
点击查看字符和字节的区别ASCII、Unicode 和 UTF-8 编码的区别。 安全链接放心跳转
QByteArray 思考char buf[6] “hello”; 如果 C 语言中要利用 buf 内容重新生成 “hello world” 字符串该怎样做 char dest[16] {0};// 方法一
strcat(dest, buf);
strcat(dest, world);// 方法二
sprintf(dest, %s world, buf);Qt 通过 QByteArray 为我们提供了一个可变长的字节数组容器。主要用来存储原始的字节流。 QByteArray 仍可以表示字符串类似于 unsigned char buf[]但是 Qt 中多用 QString 来表示字符串。 QByteArray 一般结合其它类使用比如 QIODevice 类的 QByteArray QIODevice::readAll()。
QByteArray(const char *data, int size -1); // 构造函数
char at(int i) const; // 返回第i个元素
void clear(); // 清空
bool contains(const char * str) const; // 是否包含字符串 strstr
bool contains(char ch) const; // 是否包含字符
char *data(); // 从 QByteArray 类型转化为 char *int indexOf(const char *str, int from 0); // 查找 从 from 开始第一次匹配 str 的位置
QByteArray append(char ch); // 尾部增加
QByteArray prepend(char ch); // 头部增加
int length() const; // 返回长度
QByteArray remove(int pos, int len); // 删除QByteArray 定义一个字符串 “my”使用 qDebug 输出每个字符。 在其前增加 Welcome to 其后增加 world. 验证新字符串中是否包含 “we” 字符串。 删除从 “world” 字符串后的所有字符。
// main.cpp#include widget.h
#include QApplicationint main(int argc, char *argv[])
{QByteArray arr(my);arr.prepend(Welcome to );arr.append( world. );qDebug() arr;for (int i 0; i arr.length() / 5; i) // 字符太多显示前几个qDebug(0x%x, arr.at(i));qDebug() arr.contains(we);qDebug() arr.contains(We); // 大小写敏感arr.remove(arr.indexOf(world)5, arr.length());// 若要删除 含 world 在内的、其后所有字符去掉 5// 第二个参数写长些可以多于字符串中剩余字符的个数不会报错qDebug() arr;return 0;
}QString
QString 类提供了一个 Unicode 文本和经典的 C语言 以 ‘\0’ 结尾的字符数组的抽象。
数字转字符串
QString number(long n, int base 10) [static];
QString number(double n, char format g, int precision 6) [static];e.g. long a 63; QString s QString::number(a, 10); // s “63” QString t QString::number(a, 16).toUpper(); // t “3F” QByteArray 同理。 字符串转数字
short toShort(bool * ok 0, int base 10) const;
float toFloat(bool * ok 0) const;
long toLong(bool * ok 0, int base 10) const;
// 也可以 toInte.g. QString str1 “1234.56”; float a str1.toFloat(); // a 1234.56 QByteArray 同理。 QString 转 QByteArray
QByteArray toLocal8Bit() const;
QByteArray toUtf8() const;QByteArray 转 char *
char *data();QString 通过 QByteArray 间接转 char *
QString 没有直接转换为 char * 的方法需要中间经过一层 QByteArray 的过渡。
char *dest src.toLocal8Bit().data();
char *dest src.toUtf8().data();QList 模板类
QList(const QListT other);
QListT operator(const QListT other);定义一个 int 类型的 QList初始化为1、2、3再增加 4。 定义一个 QString 类型的 QList只需要把 改为 再初始化。
#include widget.h
#include QApplicationint main(int argc, char *argv[])
{QListint list; // 不能在这里初始化list 1 2 3;list.append(4);qDebug() list; // 不能这样写qDebug(list);QListQString strlist; // 不能在这里初始化strlist b c d;strlist.prepend(a);for (int i 0; i strlist.length(); i)qDebug() strlist.at(i); // 不能格式化输出 %cQListQByteArray qblist; // 不能在这里初始化qblist x y;qblist.append(z);for (int i 0; i qblist.length(); i)qDebug() qblist.at(i); // 不能格式化输出 %creturn 0;
}堆栈窗体
QStackedWidget
Public Functions:QStackedWidget(QWidget * parent 0);如果单纯指定父窗口但是没有指定大小那么是不显示的int addWidget(QWidget * widget);增加窗体增加完后默认会分配一个 index值从 0 开始int currentIndex() const;获取当前显示窗体的 index值Public Slots:void setCurrentIndex(int index);设置 第index 个页面为栈顶显示页面 // 一般用这个void setCurrentWidget(QWidget *widget); Signals:void currentChanged(int index);窗体发生变化后发出信号index 代表更换后窗体 index 值widget.cpp
#include widget.hWidget::Widget(QWidget *parent): QWidget(parent)
{// 初始化三个窗体QWidget *firstPageWidget new QWidget;QWidget *secondPageWidget new QWidget;QWidget *thirdPageWidget new QWidget;// 在三个窗体分别设置三个按钮QPushButton *btn1 new QPushButton(Page 1, firstPageWidget);QPushButton *btn2 new QPushButton(Page 2, secondPageWidget);QPushButton *btn3 new QPushButton(Page 3, thirdPageWidget);// 实例化堆栈窗体对象把窗体添加到堆栈窗体QStackedWidget *stackedWidget new QStackedWidget;stackedWidget-addWidget(firstPageWidget);stackedWidget-addWidget(secondPageWidget);stackedWidget-addWidget(thirdPageWidget);// QListWidget *listWidget new QListWidget;
// QListWidgetItem *firstItem new QListWidgetItem(tr(First), listWidget);
// QListWidgetItem *secondItem new QListWidgetItem(tr(Sencond), listWidget);
// QListWidgetItem *thirdItem new QListWidgetItem(tr(Third), listWidget);// listWidget-insertItem(0, firstItem);
// listWidget-insertItem(1, secondItem);
// listWidget-insertItem(2, thirdItem); // 两种方法都可以方法一QListWidget *listWidget new QListWidget; // 方法二listWidget-addItem(tr(First));listWidget-addItem(tr(Sencond)); // 多打了个 n请忽略listWidget-addItem(tr(Third));QHBoxLayout *layout new QHBoxLayout;layout-addWidget(listWidget, 1);layout-addWidget(stackedWidget, 3);this-setLayout(layout);connect(listWidget, SIGNAL(currentRowChanged(int)), stackedWidget, SLOT(setCurrentIndex(int)));// 堆栈窗体的槽是确定的 —— setCurrentIndex(int)也就意味着对应信号的参数也必须和槽匹配this-resize(960, 600);}Widget::~Widget()
{
}UI 实现堆栈窗体 布局部分 信号与槽
该部分可用代码实现也可用 UI 实现。
UI 实现 代码实现widget.cpp
#include widget.h
#include ui_widget.hWidget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui-setupUi(this);QObject::connect(ui-listWidget, SIGNAL(currentRowChanged(int)), \ui-stackedWidget, SLOT(setCurrentIndex(int)));
}Widget::~Widget()
{delete ui;
}效果展示