ZBLOG

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 类中添加信号:
  1. class ButtonItem : public QWidget {
  2. Q_OBJECT
  3. private:
  4. QPushButton *left_btn;
  5. QPushButton *right_btn;
  6. signals:
  7. void leftButtonClicked(); // 定义左侧按钮点击信号
  8. void rightButtonClicked(); // 定义右侧按钮点击信号
  9. public:
  10. ButtonItem(int item_type, QWidget *parent = nullptr) : QWidget(parent) {
  11. // 其他代码...
  12. connect(left_btn, &QPushButton::clicked, this, &ButtonItem::leftButtonClicked);
  13. connect(right_btn, &QPushButton::clicked, this, &ButtonItem::rightButtonClicked);
  14. // 其他代码...
  15. }
  16. };
  1. LeftTreeWidgetItem 中连接这些信号到槽函数:
  1. class LeftTreeWidgetItem {
  2. public:
  3. LeftTreeWidgetItem(const QString &text, LeftTreeWidget *parent) {
  4. item = new QTreeWidgetItem(parent);
  5. item->setText(0, text);
  6. QWidget *buttonContainer;
  7. if(text.contains("飞机")) {
  8. item->setIcon(0, QIcon(":/png/feiji.png"));
  9. buttonContainer = new ButtonItem(SHEBEI_LEVEL_1);
  10. } else if(text.contains("子网")) {
  11. item->setIcon(0, QIcon(":/png/ziwang.png"));
  12. buttonContainer = new ButtonItem(ZIWANG);
  13. } else if(text.contains("无人机")) {
  14. item->setIcon(0, QIcon(":/png/wurenji_xiao.png"));
  15. buttonContainer = new ButtonItem(SHEBEI_LEVEL_1);
  16. } else if(text.contains("区域网列表")) {
  17. item->setSizeHint(0, QSize(280, 55));
  18. item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
  19. buttonContainer = new ButtonItem(ZIWANG_HEAD);
  20. } else if(text.contains("设备列表")) {
  21. item->setSizeHint(0, QSize(280, 55));
  22. item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
  23. buttonContainer = new ButtonItem(SHEBEI_HEAD);
  24. }
  25. // 将 frame 设置为该条目的 widget
  26. QFrame *frame = new QFrame();
  27. QVBoxLayout *frameLayout = new QVBoxLayout(frame);
  28. frameLayout->addWidget(buttonContainer);
  29. parent->setItemWidget(item, 0, frame);
  30. // 强制将buttonContainer转换成指向 Buttonitem 的指针,以便访问它的信号
  31. ButtonItem* btn_item = qobject_cast<ButtonItem*>(buttonContainer);
  32. if(btn_item) {
  33. connect(btn_item, &ButtonItem::leftButtonClicked,
  34. this, &LeftTreeWidgetItem::onLeftBtnClicked); // 假设我们已经定义了 onLeftBtnClicked 槽函数
  35. connect(btn_item, &ButtonItem::rightButtonClicked,
  36. this, &LeftTreeWidgetItem::onRightBtnClicked); // 假设我们已经定义了 onRightBtnClicked 槽函数
  37. }
  38. }
  39. private slots:
  40. void onLeftBtnClicked() {
  41. // 处理左侧按钮点击事件
  42. }
  43. void onRightBtnClicked() {
  44. // 处理右侧按钮点击事件
  45. }
  46. };

注意事项:

  • 确保您的类使用了 Qt 的 MOC(Meta-Object Compiler)机制,因此要包含 Q_OBJECT 宏并且正确配置编译器。
  • 在头文件中,也要声明相关的槽函数,比如 onLeftBtnClicked()onRightBtnClicked()


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?