字符串类

操作字符串

QString 提供了一个二元的“+”操作符用于组合两个字符串,并提供一个+=操作符将一个字符串追加到另一个字符串的结尾另一种方法QString::append()函数具有同样功能。

1
2
3
QString str1 = "welcome";
str1 = str1 + "to you"; //str1 = "welcome to you";
QString.append("!"); //str = "welcome to you !";

其他组合字符串作用函数:

insert()函数 原字符串特定位置插入另一个字符串
prepend()函数 原字符串的开头插入另一个字符串
replace()函数 用指定的字符串代替另一个字符串
arg()函数 重载数据类型
trimmed()函数 移除字符串两端的空白字符
simplified()函数 移除字符串两端的空白字符,使用单个空格字符”“代替字符串中出现的空白字符。

查询字符串数据

QString::startsWith()函数判断一个字符串是否以第一个参数的字符串开头,第二个参数是是否大小写敏感。

1
2
QString str= "hello world";
QString::startsWith("hello", Qt::CaseSensitive); //返回true

同理QString::endWith是判断一个字符串是否以第一个参数的字符串结尾。

QString::contains判断一个指定字符串是否出现过。

localeAwareCompare(const QSring&, const QString&):静态函数比较前后两个字符串。

字符串转换函数

QString::toInt()函数将字符串转换为整型数值,类似的函数还有 toDouble() 、 toFloat() 、toLong() 、 toLongLong()等。

1
2
3
4
QString str="l25"; //初始化一个 "125" 的字符串
bool ok;
int hex=str. toInt (&ok, 16) ; / / ok=true, hex=2 93
int dec=str.toint(&ok,10);

第一个参数bool类型指针用于返回转换状态。成功true,失败false。第二个参数指定了转换基数,0x为16基数16,0为基数8,其他都是10;

① toAsciiO~ 返回一个 ASCII 编码的 8 位字符串。
② toLatinlO: 返回一个 Latin-I 0S08859-1) 编码的 8 位字符串。
③ toUtf80: 返回一个 UTF-8 编码的 8 位字符串 (UTF-8 是 ASCII 码的超集
④ toLocal8Bit0: 返回一个系统本地 (locale) 编码的 8 位字符串。

容器类

Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项。比如,你需要一个大小可变的QString的数组,则使用QVector

这些容器类比STL(C++标准模板库)容器设计得更轻量、更安全并且更易于使用。如果对STL不熟悉,或者倾向于用“Qt的方式”,那么你可以使用这些类,而不去使用STL的类。

存储在 Qt 容器中的数据必须是可赋值的数据类型,也就是说,这种数据类型必须提供一个默认的构造函数(不需要参数的构造函数)、一个复制构造函数和一个赋值操作运算符。

QList 类、QLinkedList 类和 QVector 类

概述
QList 这是目前使用最频繁的容器类,它存储了指定类型(T)的一串值,可以通过索引来获得。本质上QList是用数组实现的,从而保证基于索引的访问非常快。
QLinkedList 类似于QList,但它使用迭代器而不是整数索引来获得项。当在一个很大的list中间插入项时,它提供了更好的性能,并且它有更好的迭代器机制。
QVector 在内存中相邻的位置存储一组值,在开头或中间插入会非常慢,因为它会导致内存中很多项移动一个位置。
QStack QVector的一个子类,提供后进先出的机制。在当前的QVector中增加了几个方法:push()、pos()、top()。
QQueue QList的一个子类,提供了先进先出的机制,在当前的QList中增加了几个方法:enqueue()、dequeue()、head()。
QSet 单值的数学集合,能够快速查找。
QMap<Key, T> 提供了字典(关联数组)将类型Key的键对应类型T的值。通常一个键对应一个值,QMap以Key的顺序存储数据,如果顺序不重要,QHash是一个更快的选择。
QMultiMap<Key, T> QMap的子类,提供了多值的接口,一个键对应多个值。
QHash<Key, T> 和QMap几乎有着相同的接口,但查找起来更快。QHash存储数据没有什么顺序。
QMultiHash<Key, T> QHash的子类,提供了多值的接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv)
QList<int> list;
list<<1 << 2<< 3<< 4<< 5;
QListIterator<int> i (list);
for(; i.hasNext();)
qDebug() << i.next();
return a.exec();

}

QVariant 类

QVariant 类类似千 C++的联合 (union) 数据类型,它不仅能保存很多 Qt 类型的值,包括QColor 、 QBrush 、 QFont 、 QPen 、 QRect 、 QString 和 QSize 等,而且也能存放 Qt 的容器类型的值。

新建QtWidgets Application基类选择QWidget,取消创建界面复选框。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "widget.h"
#include <Qdebug>
#include <QVariant>
#include <QColor>
Widget :: Widget(QWidget *parent)
:QWidget(parent)
{
QVariant v(709);//声明了一个QVariant变量v,并初始化为整数
QDebug() << v.toInt(); //调用QVariant::toInt函数将QVariant变量包含的内容换为整数并输出。
QVariant w("How are you ?"); //声明一个QVariant变量w初始化为字符串
qDebug() << w.toString(); //调用QVariant::toString函数将QVariant变量包含的内容换为整数并输出。
QMap<QString, QVariant> map;//声明一个 QMap 变量 map, 使用字符串作为键, QVariant变量作为值。
map["int"] = 709;
map["int"J=709;
map["double")=709. 709;
map ["string") ="How are you! ";
map["color")=QColor(255,0,0);
qDebug () <<map ["int"]<< map["int"] .toint();
qDebug()<<map["double"]<< map["double"].toDouble();
qDebug()<<map["string"J<< map["string"] .toString();
qDebug () <<map ["color"]<< map ["color"]. value<QColor> (); //在 QVariant 变量中保存了一个 QColor 对象,并使用模板 QVariant: :value()还原为 QColor, 然后输出。
QStringList sl; //创建一个字符串列表
sl<<"A"<<"B"<<"C"<<"D";
QVariant slv(sl); //将该列表保存在一个 QVariant 变量中
if (slv. type() ==QVariant:: StringList) //QVariant: :type() 函数返回存储在 QVariant 变量中的值的数据类型。
{
QStringLis 七 list=slv.toStringList();
for(int i=O;i<list.size() ;++i)
qDebug ()«list. at (i); / /输出列表内容
}
}

算法及正则表达式

常用的算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a0(argc, argv);
double a = -19.3, b=9.7;
double c =aAbs(a);
double max = aMax(b, c);
int bn = qRound(b);
int cn = qRound(c);
qDebug() << "a= "<< a;
qDebug() << "b= "<< b;
qDebug() << "c = qAbs(a)= " << c;
qDebug()<<"c=qAbs(a)= "<<c;
qDebug()<<"qMax(b,c)= "<<max;
qDebug()<<"bn=qRound(b)= "<<bn;
qDebug()<<"cn=qRound(c)= "<<en;
qSwap (bn, en);
//调用 qDebug ()函数输出所有的计算结果
qDebug () <<"qSwap (l?n, en) : "<<"bn="<<bn<<" cn="<<cn;
return aO. exec() ;
}

正则表达式

正则表达式由表达式、量词、断言组成。

  1. 最简单的表达式是一个字符。

  2. 量词说明表达式出现的次数。

    量词 含义 量词 含义
    E? 匹配0次或1次 E[n,] 至少匹配n次
    E+ 匹配1次或多次 E[,m] 最多匹配m次
    E* 匹配0次或多次 E[n,m] 至少匹配n次,最多匹配m次
    E[n] 匹配n次
  3. “^””$””\b”都是正则表达式的断言,

符号 含义 符号 含义
^ 表示在字符串开头进行匹配 \B 非单词边界
$$ 表示字符串结尾进行匹配 (?=E) 表示表达式后跟随E才匹配
\b 单词边界 (?!E) 表示表达式后不跟随E才匹配

例如,若要只有在 using 后面是 namespace 时才匹配 using, 则可以使用 “using(?=E\s+namespace)”

控件

QWidget 是所有 Qt GUI 界面类的基类,它接收鼠标、键盘及其他窗口事件,并在显示器上绘制自己。通过传入 QWidget 构造函数的参数(或者调用 QWidget: :setWindowFlagsQ和 QWidget::setParentO 函数)可以指定一个窗口部件的窗口标识 (window flags) 和父窗口部件。

窗口部件的窗口标识 (window flags) 定义了窗口部件的窗口类型和窗口提示 (hint) 。窗口类型指定了窗口部件的窗口系统属性 (window-system properties), 一个窗口部件只有一个窗口类型窗口提示定义了顶层窗口的外观,一个窗口可以有多个提示(提示能够进行按位或操作)。没有父窗口部件的 Widget 对象是一个窗口,窗口通常具有一个窗口边框 (frame) 和一个标题栏。

QMainWindow 和所有的 QDialog 对话框子类都是经常使用的窗口类型,而子窗口部件通常处在父窗口部件的内部,没有窗口边框和标题栏。

QWidget 窗口部件的构造函数为:

1
QWidget(QWidget *parent=O,Qt::WindowFlags f=O)

参数 parent 指定了窗口部件的父窗口部件,如果 parent=O C 默认值),则新建的窗口部件将是一个窗口;否则,新建的窗口部件是 parent 的子窗口部件 。

创建窗口

如果 Widget 未使用父级进行创建,则在显示时视为窗口或顶层 Widget。由于顶层 Widget没有父级对象类来确保在其不再被使用时就被删除,所以需要开发人员在应用程序中对其进行跟踪。

1
2
3
4
5
6
QWidget *window= new QWidget();
window->resize(320, 240);
window->show();
QPushButton *button= new QPushButton(tr("Press me"), window); //通过将 window 作为父级传递给其构造器来向窗口添加子 Widget:button
button->move (100, 100);
button->show ();

使用布局
通常,子 Widget 是通过使用布局对象在窗口中进行排列的,而不是通过指定位置和大小进行排列的。在此,构造一个并排排列的标签和行编辑框 Widget:

1
2
3
4
5
6
QLabel *label = new QLabel(tr("Name:"));
QLineEdit *lineEdit = new QLineEdit();
QHBoxLayout * layout"" new QHBoxLayout (};
layout->addWidget (label);
layout->addWidget (lineEdit);
window->setLayout(layout);

构造的布局对象管理通过 addWidgetO函数提供 Widget 的位置和大小。布局本身是通过调用setLayout 函数提供给窗口的。布局仅可通过其对所管理的 Widget C 或其他布局)的显示效果来展示。

输入控件

QCheckBox是一个选项按钮,可以打开(选中)或关闭(未选中)。复选框通常用于表示应用程序中可以启用或禁用而不影响其他功能的功能。可以实现不同类型的行为。提供了多选多的选择模式。

方法 描述
setText(const QString &text) 设置显示文本
setChecked(bool) 未开启三态模式设置选中状态,默认为未选中,true为选中
isChecked() 判断是否选中
setTristate(bool y = true) true为开启三态模式
setCheckState(Qt::CheckState state) 开启三态模式后设置选中状态

Qt::CheckState类型

类型 描述
Qt::Unchecked 0 未选中
Qt::PartiallyChecked 1 半选中
Qt::Checked 2 选中

常用信号

信号 描述
stateChanged(int) 选中状态改变触发该信号