信号槽、父子关系、隐式共享
1. Qt基础
- connect(…):连接了"OK"按钮至QDialog的accept槽函数,以及"Cancel"按钮至QDialog的reject槽函数。根据结果判断按下的是"OK"按钮还是"Cancel"按钮。
- parent-child机制:当建立一个物件时,若有parent,则parent将此物件加入其children list。消除parent时,会根据children list 消除这些child。widget的parent还决定了child widget的显示范围。
- 实现槽函数on_lineEdit_textChanged():
```cpp
void Dialog::on_lineEdit_textChanged() {
ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput());
}
```
- 运行工程:当在lineEdit中输入A12后,"OK"按钮将自动变为可用状态。
2. 字符串类QString:概念解析
- 隐式共享技术:当两个对象共享数据时,根据数据是否改变进行深拷贝或浅拷贝。
- QString类采用隐式共享技术,结合深拷贝和浅拷贝。
- 通过例子说明隐式共享如何工作:
```cpp
QString str1 = "data";
QString str2 = str1;
str2[3] = 'e';
str2[0] = 'f';
str1 = str2;
```
3. Qt中支持隐式共享的类:
- 所有的容器类。
- QByteArray、QBrush、QPen、QPalette、QBitmap、QImage、QPixmap、QCursor、QDir、QFont和QVariant等。
4. QString内存分配策略:
- 每次分配4个字符空间,直到大小为20。
- 在20~4084之间,内存块大小以2倍速增长。
- 从4084开始,每次以2048个字符大小的步长增长。