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)来调用选中项。

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

class LeftTreeWidget : public QTreeWidget
{
    Q_OBJECT
public:
    explicit LeftTreeWidget(bool isNodeList, QTreeWidget *parent = nullptr) 
        : QTreeWidget(parent) {
        // 构造函数实现
    }

    // 添加公共方法以便返回选中的项目
    QList<QTreeWidgetItem*> getSelectedItems() const {
        return selectedItems(); // 调用基类的方法
    }

protected:
    void paintEvent(QPaintEvent *event) override {
        // 实现绘制事件
    }

public slots:
    void onItemSelectionChanged();
};

class LeftTreeWidgetItem : public QWidget 
{
    Q_OBJECT
private:
    QTreeWidgetItem *item;
    LeftTreeWidget* pItem;

public:
    explicit LeftTreeWidgetItem(const QString &text, LeftTreeWidget *parent)
        : QWidget(parent), pItem(parent) {
        // 构造函数实现
    }

protected:
    QList<LeftTreeWidgetItem*> selectedItems() const {
        QList<LeftTreeWidgetItem*> items;

        // 使用父类的 getSelectedItems 方法获取选中的项目列表
        foreach (QTreeWidgetItem* item, pItem->getSelectedItems()) {
            LeftTreeWidgetItem* leftItem = dynamic_cast<LeftTreeWidgetItem*>(item);
            if (leftItem) {
                items.append(leftItem);
            }
        }
        
        return items;
    }

signals:

public slots:
    void onLeftBtnClicked(QPushButton* left_btn);
};

关键点

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

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

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?