ZBLOG

class LeftTreeWidgetItem; class LeftTreeWidget : public QTreeWidget { Q_OBJECT private: public: explicit LeftTreeWidget(bool isNodeList, QTreeWidget *parent = 0); protected: void paintEvent(QPaintEvent *event) override; public slots:...

在你的代码中,你定义了一个 selectedItems 函数,试图重载 QTreeWidget::selectedItems() 方法,但出现了编译错误。这是因为你尝试用类名直接调用成员函数,而没有通过对象实例进行调用。让我们来解决这个问题。

1. 问题分析

首先,你的 LeftTreeWidgetItem 类中有一个 selectedItems() 成员函数,它意图获取选中的项。但是它使用了 LeftTreeWidget::selectedItems() 来调用,这样是不正确的,因为这是一个非静态成员函数,必须通过对象实例来调用。

2. 解决方案

要修复这个问题,可以这样修改:

  • LeftTreeWidget 类中添加一个公共方法以便外部访问 selectedItems()
  • 在实现的地方,你可以直接引用当前对象(this)来调用选中项。

以下是调整后的代码示例:

  1. class LeftTreeWidget : public QTreeWidget
  2. {
  3. Q_OBJECT
  4. public:
  5. explicit LeftTreeWidget(bool isNodeList, QTreeWidget *parent = nullptr)
  6. : QTreeWidget(parent) {
  7. // 构造函数实现
  8. }
  9. // 添加公共方法以便返回选中的项目
  10. QList<QTreeWidgetItem*> getSelectedItems() const {
  11. return selectedItems(); // 调用基类的方法
  12. }
  13. protected:
  14. void paintEvent(QPaintEvent *event) override {
  15. // 实现绘制事件
  16. }
  17. public slots:
  18. void onItemSelectionChanged();
  19. };
  20. class LeftTreeWidgetItem : public QWidget
  21. {
  22. Q_OBJECT
  23. private:
  24. QTreeWidgetItem *item;
  25. LeftTreeWidget* pItem;
  26. public:
  27. explicit LeftTreeWidgetItem(const QString &text, LeftTreeWidget *parent)
  28. : QWidget(parent), pItem(parent) {
  29. // 构造函数实现
  30. }
  31. protected:
  32. QList<LeftTreeWidgetItem*> selectedItems() const {
  33. QList<LeftTreeWidgetItem*> items;
  34. // 使用父类的 getSelectedItems 方法获取选中的项目列表
  35. foreach (QTreeWidgetItem* item, pItem->getSelectedItems()) {
  36. LeftTreeWidgetItem* leftItem = dynamic_cast<LeftTreeWidgetItem*>(item);
  37. if (leftItem) {
  38. items.append(leftItem);
  39. }
  40. }
  41. return items;
  42. }
  43. signals:
  44. public slots:
  45. void onLeftBtnClicked(QPushButton* left_btn);
  46. };

关键点

  1. 创建公共接口:在 LeftTreeWidget 中添加了 getSelectedItems() 方法,允许其他类安全地访问被选中的项。

  2. 使用父指针:在 LeftTreeWidgetItem 中,通过保存对 pItem 的引用来访问它的方法,从而避免不必要的重复和潜在错误。

  3. 避免命名冲突:确保不同类之间的方法不会相互干扰,以增强代码的可维护性和可读性。

这些更改应该能帮助你消除编译错误,并使你的程序正常工作。如果还有其他问题,请随时告诉我!


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?