ZBLOG

void ViewProgress::soltPaperNum(int iPaperNum) { for (answerItem* item : itemList) { delete item; // 删除指向的对象 } itemList.clear(); // 清空 QList for(int i= 0; i

answerItem 类中获取其父类 ViewProgress 的实例,可以使用 qobject_cast。由于 answerItem 的构造函数将 this 指针传递给父类的构造函数(也就是 QWidget),所以你可以通过它的父指针获取到 ViewProgress

这里是如何实现的:

1. 在 answerItem 中添加一个方法来获取父类

在你的 answerItem 类中,你可以定义一个方法来返回指向 ViewProgress 的指针。例如:

class answerItem : public QWidget {
    // ... 其他代码 ...
public:
    explicit answerItem(QWidget *parent, int paperNumber);
    
    ViewProgress* getParentViewProgress() {
        return qobject_cast<ViewProgress*>(parent());
    }

    // ... 其他代码 ...
};

2. 使用这个方法

然后在你需要使用到 ViewProgress 实例的地方调用这个方法,比如在信号槽或其他成员函数中:

void answerItem::onLabelClicked() {
    ViewProgress* view = getParentViewProgress();
    if (view) {
        // 成功获得了 ViewProgress 指针,可以使用 view 执行相关操作
        qDebug() << "Successfully obtained ViewProgress instance.";
    } else {
        qDebug() << "Failed to obtain ViewProgress instance.";
    }
}

注意事项

  • 确保 parent 为 ViewProgress:虽然使用 qobject_cast 可以安全地进行转换,但仍然需要确保父对象确实是期望的类型。通常情况下,在创建这些对象时要遵循适当的逻辑和结构。

  • 避免循环引用:如果你从子对象访问其父对象,务必小心设计,以避免引发复杂性和内存管理问题,特别是在使用 Qt 的信号和槽机制时。

通过这种方式,你就能在 answerItem 中安全地访问到其父窗口中的功能或数据了。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?