QT开发中文网

class ButtonItem : public QWidget { Q_OBJECT private: QPushButton *left_btn; QPushButton *right_btn; public: ButtonItem(int item_type, QWidget *parent = nullptr) : QWidget(parent) { if(ZIWANG == item_type || ZIWANG_HEAD == ...

LeftTreeWidgetItem类中,您可以通过连接信号和槽来定义ButtonItem中的left_btnright_btn两个按钮的槽函数。为此,首先确保您的ButtonItem类中定义了信号,然后在构造函数中连接这些信号到相应的槽函数。

下面是一个示例说明如何实现这一点:

  1. 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);
        
        // 其他代码...
    }
};
  1. 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助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?