• 3773阅读
  • 1回复

[原创]《Foundations of Qt Development》阅读笔记(第一章) [复制链接]

上一主题 下一主题
离线neohunter
 

只看楼主 倒序阅读 楼主  发表于: 2016-02-18
— 本帖被 XChinux 设置为精华(2016-02-20) —
Foundations_of_Qt_Development.zip (5424 K) 下载次数:30 感兴趣的同学可以下载阅读

英文一直不好,有错误的地方请多指正;

Chapter 1   The Qt Way of C++


1.信号、槽和元对象的定义:                           
    Signal:是被发出而不是被执行的,这一点和现实生活中的信号很相似。程序员只需要在类中声明信号的原型,而不必实现它。记住信号只是被发出的就行了。
     slot : 是信号发出后执行的函数。一个信号可以和多个slot连接。
     Meta-Object:元对象中,元是本来自己的意思。这里是指元对象是描述对象的一个对象。Q_OBJECT属于元对象,当然本身包括了Signal和slot的定义。
2.信号、槽到底是如何实现的:
  总体上来说是用函数指针来实现的。当发送一个信号的时候(其实信号对应的函数是由qt自己实现的),其实的调用了moc实现的函数(关于信号),这个函数使用元对象将执行连接的slot函数。
  元对象包含一个函数指针,包含了一个列表使得信号的名字和参数与slot一一对应。当connect函数调用的时候,就将slot函数加入到信号列表中。如果参数匹配成功就立即执行该slot函数。
3.对象继承至QObject,在构造函数中需要创建QObject *parent = 0 并赋值为0,当对象被删除的时候,该类对象自动删除。
4.要显示调试信息,需要包含QDebug
   并使用qDebug() << .....
   使用qFatal()  将显示并终止程序
   使用qWarning() 显示警告
   使用define QT_NO_DEBUG_OUTPUT关闭所有调试信息
4.QT中能使用两种迭代器:Java风格和STL风格如下:
  Jave风格:
  QListIterator<int> javaIter( list );
  while( javaIter.hasNext() )
  qDebug() << javaIter.next();

  其中hasNext()遍历容器中每一个有值的项目,next读取当前项目,并将迭代器指示到下一个项目中

STL风格:
  QList<int>::const_iterator stlIter;
  for( stlIter = list.begin(); stlIter != list.end(); ++stlIter )

  qDebug() << (*stlIter);
  当使用for循环的时候,偏向于使用前缀(++迭代器),这时候编译器就不会创建零时的变量,能节省时间
  两种方式中Java更容易阅读和理解,STL的执行效率略高。建议使用java风格
  注意:为了创建更易读的代码,推荐广泛使用
        typedef QList<MyClass>  MyClassList
        typedef QList<MyClass>::Iterator MyClassListIterator

需要更改容器中的内容的时候,使用QMutableListIterator
QMutableListIterator<int> javaIter( list );
while( javaIter.hasNext() )
{
int value = javaIter.next() + 1;
javaIter.setValue( value );
qDebug() << value;
}
QList<int>::Iterator stlIter;
for( stlIter = list.begin(); stlIter != list.end(); ++stlIter )
{
(*stlIter) = (*stlIter)*2;
qDebug() << (*stlIter);
}


5.List的追加操作:


总结:QHash 和 QMap章节的后面部分没有看懂。完成阅读后重新学习一下。
1.类以大写字母开头,属于QT的类以Q为前缀;
2.函数方法是小写字符开头,后面的单词首字符大写;
3.slot和普通的函数一样,而signal只需要你声明就Ok,他的实现就交给元对象吧;
4.connect函数不会处理具体的参数值,只是管理参数类型;
5.当需要使用signal和slot的时候,必须要继承QObject在类的声明中也要加入Q_OBJECT这是为了告诉元对象(meta-object)这个类需要元对象的帮助;
本章还介绍了很多类:QString,QList, QLinkedList, QVector,QQueue  QStack......




离线sblpp

只看该作者 1楼 发表于: 2016-02-27
谢谢分享!
快速回复
限100 字节
 
上一个 下一个