ZBLOG

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

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

  1. 索引越界

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

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

    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. 按钮布局问题

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

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

  5. 调试信息

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

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

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

if (droneNodeMap.find(fleet_page_id) != droneNodeMap.end()) {
    int size = droneNodeMap[fleet_page_id].size();
    qDebug() << "=======size:" << size;

    if (0 == fleet_page_id) {
        LeftTreeWidgetItem *fleet_head = new LeftTreeWidgetItem(QString("编队列表"), this);
        for (int fleet_id = 0; fleet_id < size; ++fleet_id) {
            // 获取每一个编队中的数据
            LeftTreeWidgetItem *fleet_item = new LeftTreeWidgetItem(QString("编队%1").arg(fleet_id + 1), this);
            // 建立父子关系等...
        }
    } else {
        // 对设备列表及其它项进行处理...

        for (int drone_id = 0; drone_id < size; ++drone_id) {
            if (0 == drone_id) {
                LeftTreeWidgetItem *airplane_item = new LeftTreeWidgetItem(QString("中心节点%1").arg(drone_id), drone_id, airplane_head, this);
                // ...
            } else {
                qDebug() << "无人机 drone_id:" << drone_id;
                LeftTreeWidgetItem *airplane_device_item = new LeftTreeWidgetItem(QString("设备%1").arg(drone_id + 1), drone_node, this);
                // ...
            }
        }

        ButtonLowItem *btnItem = new ButtonLowItem(this);
        QVBoxLayout *layout = new QVBoxLayout();
        layout->addWidget(btnItem); // 加入其他控件而不是自身。
        btnItem->setLayout(layout); 
        btnItem->move(10,650);
    }
}

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?