ZBLOG

LeftTreeWidget::LeftTreeWidget(int fleet_page_id, std::map droneNodeMap, QWidget *parent) : QTreeWidget(parent) { // 绘制背景图片 this->...

感谢提供代码。根据你的 LeftTreeWidget 类的构造函数,这里有几个潜在的问题和改进建议:

  1. 索引越界

    1. for(int fleet_id = 0; fleet_id <= droneNodeMap[fleet_page_id].size(); fleet_id++) {

    在这段代码中,使用 <= 会导致循环在索引超出范围时运行。应将其修改为 <

    1. for(int fleet_id = 0; fleet_id < droneNodeMap[fleet_page_id].size(); fleet_id++) {
  2. 确保数据有效性

    • 在访问 droneNodeMap[fleet_page_id] 前,最好先检查 fleet_page_id 是否存在于 droneNodeMap 中。这可以避免因访问不存在的键而导致的崩溃。
  3. Item 的父子关系

    • 创建树节点 (LeftTreeWidgetItem) 时,要确认其父项是否正确。你在某些地方直接使用了 this,这可能会导致结构不符合预期。
  4. 按钮布局问题

    1. ButtonLowItem *btnItem = new ButtonLowItem(this);
    2. QVBoxLayout *layout = new QVBoxLayout(btnItem);
    3. layout->addWidget(btnItem); // 这里是个错误
    4. btnItem->setLayout(layout);

    在这个部分,你不需要调用 addWidget() 来添加自己,因为这样会导致无限循环。如果想给按钮添加其他控件,可以创建新的控件并通过 addWidget() 添加。

  5. 调试信息

    • 调试输出很有帮助,但确保它不会影响程序性能或可读性。有必要时,可以选择性地启用或禁用调试信息。
  6. 连接信号和槽:

    • 确保你的信号(例如,itemSelectionChanged)与对应的槽函数(如 onItemSelectionChanged)实现正常,并且定义正确,以防止程序崩溃。

以下是经过修正的一部分示例代码片段,仅供参考:

  1. if (droneNodeMap.find(fleet_page_id) != droneNodeMap.end()) {
  2. int size = droneNodeMap[fleet_page_id].size();
  3. qDebug() << "=======size:" << size;
  4. if (0 == fleet_page_id) {
  5. LeftTreeWidgetItem *fleet_head = new LeftTreeWidgetItem(QString("编队列表"), this);
  6. for (int fleet_id = 0; fleet_id < size; ++fleet_id) {
  7. // 获取每一个编队中的数据
  8. LeftTreeWidgetItem *fleet_item = new LeftTreeWidgetItem(QString("编队%1").arg(fleet_id + 1), this);
  9. // 建立父子关系等...
  10. }
  11. } else {
  12. // 对设备列表及其它项进行处理...
  13. for (int drone_id = 0; drone_id < size; ++drone_id) {
  14. if (0 == drone_id) {
  15. LeftTreeWidgetItem *airplane_item = new LeftTreeWidgetItem(QString("中心节点%1").arg(drone_id), drone_id, airplane_head, this);
  16. // ...
  17. } else {
  18. qDebug() << "无人机 drone_id:" << drone_id;
  19. LeftTreeWidgetItem *airplane_device_item = new LeftTreeWidgetItem(QString("设备%1").arg(drone_id + 1), drone_node, this);
  20. // ...
  21. }
  22. }
  23. ButtonLowItem *btnItem = new ButtonLowItem(this);
  24. QVBoxLayout *layout = new QVBoxLayout();
  25. layout->addWidget(btnItem); // 加入其他控件而不是自身。
  26. btnItem->setLayout(layout);
  27. btnItem->move(10,650);
  28. }
  29. }

希望这些建议能够帮助你解决问题!如果还有其他具体问题,请继续询问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20261

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?