QT自定义一个QTreeWidget,怎么对外开放接口
时间: 2024-05-10 18:08:30 浏览: 79
要对外开放接口,需要在自定义的 QTreeWidget 类中添加公共函数或信号槽,这样其他类就可以通过调用这些函数或连接这些信号槽来与该 QTreeWidget 进行交互。
例如,在自定义的 QTreeWidget 类中添加一个公共函数 `addItem(QString text)`,用于向树形控件中添加一个新的节点:
```cpp
class MyTreeWidget : public QTreeWidget
{
Q_OBJECT
public:
explicit MyTreeWidget(QWidget *parent = nullptr);
void addItem(QString text); // 添加新节点
private:
// ...
};
```
然后在实现文件中实现该函数:
```cpp
void MyTreeWidget::addItem(QString text)
{
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0, text);
this->addTopLevelItem(item);
}
```
这样其他类就可以通过以下方式调用该函数:
```cpp
MyTreeWidget* treeWidget = new MyTreeWidget(this);
treeWidget->addItem("new item");
```
同样,也可以在自定义的 QTreeWidget 类中添加信号槽来实现与外部类的交互。例如,在 MyTreeWidget 类中添加一个信号 `itemClicked(QTreeWidgetItem* item)`,表示当用户单击某个节点时,将会发出该信号:
```cpp
class MyTreeWidget : public QTreeWidget
{
Q_OBJECT
public:
explicit MyTreeWidget(QWidget *parent = nullptr);
void addItem(QString text); // 添加新节点
signals:
void itemClicked(QTreeWidgetItem* item); // 节点被单击时发出信号
private:
// ...
};
```
然后在实现文件中,当用户单击某个节点时,发出该信号:
```cpp
MyTreeWidget::MyTreeWidget(QWidget *parent) : QTreeWidget(parent)
{
connect(this, &QTreeWidget::itemClicked, [this](QTreeWidgetItem* item, int column) {
emit itemClicked(item);
});
}
```
这样其他类就可以连接该信号槽来响应用户单击节点的操作:
```cpp
MyTreeWidget* treeWidget = new MyTreeWidget(this);
connect(treeWidget, &MyTreeWidget::itemClicked, [this](QTreeWidgetItem* item) {
qDebug() << "item clicked: " << item->text(0);
});
```
阅读全文