Qt系列02 Qt常用模版库

本节介绍Qt的QString类,容器类和QVariant类以及Qt中的控件。

QString

QString是Qt中常用的字符串处理模块,与C++中的String相似。

Qt中常常使用qDebug()来调试输出。

#include <QtGui>
#include <QApplication>
#include <QWidget>
#include <QString>
#include <QDebug>

int main(int argc, char** argv){
  QApplication a(argc, argv);

  QString str_1 = "Hello";
  QString str_2("World!");
  QString str_3;
  str_3 = str_1+str_2;

  qDebug() << str_1;
  qDebug() << str_2;
  qDebug() << str_3;


  QWidget ax;
  ax.show();

  return a.exec();
}

运行输出结果

Starting C:\Users\tang\Documents\qtproj\build-test01-Desktop_Qt_5_10_1_MinGW_32bit-Debug\debug\test01.exe...
"Hello"
"World!"
"HelloWorld!"
C:/Users/tang/Documents/qtproj/build-test01-Desktop_Qt_5_10_1_MinGW_32bit-Debug/debug/test01.exe exited with code 0

QString和C++中的String接口基本一样。

Qt容器类

Qt中提供了基于模版的容器类,与C++的STL中的容器相比,更安全,速度和内存消耗上也做了优化。

QList类、QLinkedList类、QVector类

以QList为例,简单介绍用法

#include <QtGui>
#include <QApplication>
#include <QWidget>
#include <QString>
#include <QList>
#include <QDebug>

int main(int argc, char** argv){
  QApplication a(argc, argv);
  QList<int> list_1;
  QList<int>::Iterator iter_list_1;
  for(int i = 0; i < 10; i++)
    list_1.insert(list_1.end(), i);

  for(iter_list_1=list_1.begin(); iter_list_1!=list_1.end(); iter_list_1 += 1)
    *iter_list_1 = (*iter_list_1)*10;

  QList<int>::const_iterator citer_list_1;
  for(citer_list_1 = list_1.constBegin(); citer_list_1!=list_1.constEnd(); citer_list_1 += 1)
    qDebug() << *citer_list_1;

  QWidget ax;
  ax.show();

  return a.exec();
}

编译,运行输出:

Starting C:\Users\tang\Documents\qtproj\build-test01-Desktop_Qt_5_10_1_MinGW_32bit-Debug\debug\test01.exe...
0
10
20
30
40
50
60
70
80
90
C:/Users/tang/Documents/qtproj/build-test01-Desktop_Qt_5_10_1_MinGW_32bit-Debug/debug/test01.exe exited with code 0

QMap类和QHash类

QMap类和QHash类具有相似的功能,他们的差别在于:

  • QHash的查找速度比QMap快
  • QHash按照任意顺序存储value,QMap按照key的顺序存储value

以QHash为例,

#include <QtGui>
#include <QApplication>
#include <QWidget>
#include <QString>
#include <QList>
#include <QHash>
#include <QMap>
#include <QDebug>

int main(int argc, char** argv){
  QApplication a(argc, argv);

  QHash<QString, QString> hash_01;
  hash_01.insert("beijing", "000");
  hash_01.insert("shanghai", "111");
  hash_01.insert("guangzhou", "222");
  QHash<QString, QString>::iterator iter_hash_01;
  for(iter_hash_01 = hash_01.begin(); iter_hash_01 != hash_01.end(); iter_hash_01 += 1)
    qDebug() << iter_hash_01.key() << " " << iter_hash_01.value();

  iter_hash_01 = hash_01.find("beijing");
  if(iter_hash_01 != hash_01.end())
    iter_hash_01.value() = "010";

  for(iter_hash_01 = hash_01.begin(); iter_hash_01 != hash_01.end(); iter_hash_01 += 1)
    qDebug() << iter_hash_01.key() << " " << iter_hash_01.value();

  QWidget ax;
  ax.show();

  return a.exec();
}

编译,运行结果

Starting C:\Users\tang\Documents\qtproj\build-test01-Desktop_Qt_5_10_1_MinGW_32bit-Debug\debug\test01.exe...
"beijing"   "000"
"guangzhou"   "222"
"shanghai"   "111"
"beijing"   "010"
"guangzhou"   "222"
"shanghai"   "111"
C:/Users/tang/Documents/qtproj/build-test01-Desktop_Qt_5_10_1_MinGW_32bit-Debug/debug/test01.exe exited with code 0

QVariant

QVarant类似与C++中的联合类型Union,它不仅能存储多种Qt类型的值(QColor,QSize,QString等等),也能存储Qt容器类型的值。

#include <QtGui>
#include <QApplication>
#include <QWidget>
#include <QString>
#include <QList>
#include <QHash>
#include <QMap>
#include <QVariant>
#include <QColor>
#include <QStringList>
#include <QDebug>

int main(int argc, char** argv){
  QApplication a(argc, argv);

  QVariant var1(132);
  qDebug() << var1.toInt();
  QVariant var2("Hello");
  qDebug() << var2.toString();
  QMap<QString, QVariant> map1;
  map1["Int"] = 101;
  map1["Double"] = 23.45;
  map1["String"] = "How are you";
  map1["Color"] = QColor(255,0,0);

  qDebug() << map1["Int"] << " " << map1["Int"].toInt();
  qDebug() << map1["Double"] << " " << map1["Double"].toDouble();
  qDebug() << map1["String"] << " " << map1["String"].toString();
  qDebug() << map1["Colcor"] << " " << map1["Color"].value<QColor>();

  QStringList sl;
  sl << "A" << "B" << "C" << "D";
  QVariant slv(sl);
  if(slv.type() == QVariant::StringList){
      QStringList list = slv.toStringList();
      for(int i = 0; i < 4; i++)
        qDebug() << list.at(i);
    }

  QWidget ax;
  ax.show();

  return a.exec();
}

编译,运行输出:

Starting C:\Users\tang\Documents\qtproj\build-test01-Desktop_Qt_5_10_1_MinGW_32bit-Debug\debug\test01.exe...
132
"Hello"
QVariant(int, 101)   101
QVariant(double, 23.45)   23.45
QVariant(QString, "How are you")   "How are you"
QVariant(Invalid)   QColor(ARGB 1, 1, 0, 0)
"A"
"B"
"C"
"D"
C:/Users/tang/Documents/qtproj/build-test01-Desktop_Qt_5_10_1_MinGW_32bit-Debug/debug/test01.exe exited with code 0

这一节,我们介绍了Qt中常用的模版库,与C++类似。

下一节,我们介绍Qt中常用的控件。

猜你喜欢

转载自www.cnblogs.com/tangjicheng/p/9032530.html