Qt编程细节注意事项
容器使用注意事项
-
QVector/QList 再使用at时,注意判断容器是否为空:如
QVector a;
a.at(0); // 此处程序会崩溃,类似数组指针越界 -
再使用 QQueue::dequeue()函数,先判断队列是否为空。空队列出栈,引起崩溃
QQueue que;
que. dequeue(); //程序崩溃,因为队列为空,出栈引起崩溃 -
qobject_cast<> 向下转换后,注意判断指针的有效性。转换失败,返回对象指针为空。
QPushButton* btn = qobject_cast<QPushButton*>(this->sender);
if(!btn)
return;
dosomething…
4.QMap如果使用[]操作,如果QMap容器中没有此key对应的value, 会返回默认值。
QMap<int,QString> map;
map.insert(1,“11”);
QString two = map[2]; //此处返回QString 的默认值。
5.QImage 的scale()函数 对图片进行放大或缩小时返回的新QImage,不是引用操作,如果想用同一个变量存储缩放后的图片正确使用方式:
QImage a;
a = a.scale(100,100); //如果不赋值,a依旧位缩放前的图片信息。
6.QString 的arg注意问题: QString("%1,%2,%3").arg(…).arg(…).arg(…);如果前面的arg内容中有百分号,会被后面 arg中内容替换。如:
QString a = QString("%1,%2,%3").arg(“11%2”).arg(“22%3”).arg(“33”);
a的值:“112233,2233,33” 而不是“11%2,22%3,33”.
此处衍生一个问题:再使用arg是注意arg中内容是否有‘%1~99’ 否则替换容易出错。
7.QMessageBox 中,弹出的对话框中使用标准按钮即 QMessageBox::setStandBtn(QMessageBox::Ok | QMessageBox::Cancel), 点击弹出窗口中右上角关闭按钮,返回值为最后一个标准按钮值,此处返回:QMessageBox::Cancel;
QMessageBox::setStandBtn(QMessageBox::Ok | QMessageBox::Cancel);
int value = box.exec(); 此处 有上角关闭按钮返回值: QMessageBox::Cancel;QMessageBox::setStandBtn(QMessageBox::Cancel| QMessageBox::Ok );
int value = box.exec(); 此处 有上角关闭按钮返回值: QMessageBox::Ok;
8.QList<int*> 的问题: 直接调用QList::clear()函数不会释放指针所指向的内容;需用qDeleteAll()函数释放容器指针所指向内容。然后在调用QList::Clear(),否则QList中数量不会清空。
qDeleteAll(list.begin(),list.end()); list.clear();