在LeftTreeWidgetItem类中,您可以通过连接信号和槽来定义ButtonItem中的left_btn和right_btn两个按钮的槽函数。为此,首先确保您的ButtonItem类中定义了信号,然后在构造函数中连接这些信号到相应的槽函数。
下面是一个示例说明如何实现这一点:
- 在 ButtonItem类中添加信号:
class ButtonItem : public QWidget {
    Q_OBJECT
private:
    QPushButton *left_btn;
    QPushButton *right_btn;
signals:
    void leftButtonClicked();  // 定义左侧按钮点击信号
    void rightButtonClicked(); // 定义右侧按钮点击信号
public:
    ButtonItem(int item_type, QWidget *parent = nullptr) : QWidget(parent) {
        // 其他代码...
        connect(left_btn, &QPushButton::clicked, this, &ButtonItem::leftButtonClicked);
        connect(right_btn, &QPushButton::clicked, this, &ButtonItem::rightButtonClicked);
        
        // 其他代码...
    }
};
- 在 LeftTreeWidgetItem中连接这些信号到槽函数:
class LeftTreeWidgetItem {
public:
    LeftTreeWidgetItem(const QString &text, LeftTreeWidget *parent) {
        item = new QTreeWidgetItem(parent);
        item->setText(0, text);
        
        QWidget *buttonContainer;
        if(text.contains("飞机")) {
            item->setIcon(0, QIcon(":/png/feiji.png"));
            buttonContainer = new ButtonItem(SHEBEI_LEVEL_1);
        } else if(text.contains("子网")) {
            item->setIcon(0, QIcon(":/png/ziwang.png"));
            buttonContainer = new ButtonItem(ZIWANG);
        } else if(text.contains("无人机")) {
            item->setIcon(0, QIcon(":/png/wurenji_xiao.png"));
            buttonContainer = new ButtonItem(SHEBEI_LEVEL_1);
        } else if(text.contains("区域网列表")) {
            item->setSizeHint(0, QSize(280, 55));
            item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
            buttonContainer = new ButtonItem(ZIWANG_HEAD);
        } else if(text.contains("设备列表")) {
            item->setSizeHint(0, QSize(280, 55));
            item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
            buttonContainer = new ButtonItem(SHEBEI_HEAD);
        }
        // 将 frame 设置为该条目的 widget
        QFrame *frame = new QFrame();
        QVBoxLayout *frameLayout = new QVBoxLayout(frame);
        frameLayout->addWidget(buttonContainer);
        parent->setItemWidget(item, 0, frame); 
       // 强制将buttonContainer转换成指向 Buttonitem 的指针,以便访问它的信号
       ButtonItem* btn_item = qobject_cast<ButtonItem*>(buttonContainer); 
       if(btn_item) {
           connect(btn_item, &ButtonItem::leftButtonClicked,
                   this, &LeftTreeWidgetItem::onLeftBtnClicked); // 假设我们已经定义了 onLeftBtnClicked 槽函数
           connect(btn_item, &ButtonItem::rightButtonClicked,
                   this, &LeftTreeWidgetItem::onRightBtnClicked); // 假设我们已经定义了 onRightBtnClicked 槽函数
       }
    }
private slots: 
   void onLeftBtnClicked() { 
       // 处理左侧按钮点击事件 
   }
   
   void onRightBtnClicked() { 
       // 处理右侧按钮点击事件 
   }
};
注意事项:
- 确保您的类使用了 Qt 的 MOC(Meta-Object Compiler)机制,因此要包含 Q_OBJECT宏并且正确配置编译器。
- 在头文件中,也要声明相关的槽函数,比如 onLeftBtnClicked()和onRightBtnClicked()。
 内容由零声教学AI助手提供,问题来源于学员提问


 
                             
         
        
 
         
         
         
         
         
         
        
 
                 
                 
                 
                 
                 
                 
                 
                 
                