C++/Qt编程细节注意事项

Qt编程细节注意事项

容器使用注意事项

  1. QVector/QList 再使用at时,注意判断容器是否为空:如
    QVector a;
    a.at(0); // 此处程序会崩溃,类似数组指针越界

  2. 再使用 QQueue::dequeue()函数,先判断队列是否为空。空队列出栈,引起崩溃
    QQueue que;
    que. dequeue(); //程序崩溃,因为队列为空,出栈引起崩溃

  3. 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();

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值