在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助手提供,问题来源于学员提问