QT多继承出现的问题 - 使用dynamic_cast来转换

定义了一个接口,功能是用来实现添加界面控件。
1.首先看接口:

#pragma once
class IAddUserWnd {
public:
	IAddUserWnd();
	~IAddUserWnd();

	virtual void addUserWnd(void* subWnd) = 0;
};
#include "IAddUserWnd.h"

IAddUserWnd::IAddUserWnd() {
}

IAddUserWnd::~IAddUserWnd() {
}

2.定义一个Widget,然后继承这个接口,注意:要先继承QWidget然后在继承IAddUserWnd 顺序不能变,否则会出现变异错误。

#pragma once

#include <QWidget>
#include "ui_QtGuiUserWnd.h"
#include "IAddUserWnd.h"

class QtGuiUserWnd : public QWidget ,public IAddUserWnd{
	Q_OBJECT

public:
	QtGuiUserWnd(QWidget *parent = Q_NULLPTR);
	~QtGuiUserWnd();

	virtual void addUserWnd(void* subWnd)override;
private:
	Ui::QtGuiUserWnd ui;
};

#include "QtGuiUserWnd.h"
#include "IAddUserWnd.h"

QtGuiUserWnd::QtGuiUserWnd(QWidget *parent)
	: QWidget(parent) {
	ui.setupUi(this);
}

QtGuiUserWnd::~QtGuiUserWnd() {
}

void QtGuiUserWnd::addUserWnd(void* subWnd) {
	QWidget* wnd = (QWidget*)subWnd;
	ui.verticalLayout->addWidget(wnd);
}

uiw界面
在这里插入图片描述

3.调用:

	IAddUserWnd* userWnd = new QtGuiUserWnd;
	QLabel* label = new QLabel;
	label->setText(QStringLiteral("测试文本"));
	userWnd->addUserWnd(label);
	((QWidget*)userWnd)->show();

运行一下,程序出现了崩溃:
在这里插入图片描述

4.解决问题:
把调用过程中的最后一句话,

((QWidget*)userWnd)->show();

改为:

dynamic_cast<QWidget*>(userWnd)->show();

然后运行一下就成功了!aaa

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本课程详细、全面地介绍了 Qt 开发中的各个技术细节,并且额外赠送在嵌入式端编写Qt程序的技巧。整个课程涵盖知识点非常多,知识模块囊括 Qt-Core 组件、QWidgets、多媒体、网络、绘图、数据库,超过200个 C++ 类的分析和使用,学完之后将拥有 Qt 图形界面开发的非常坚实的功底。 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。注意:本套视频教程包含大量课堂源码,包含对应每个知识点的精心编排的作业。由于CSDN官方规定在课程介绍中不能出现作者的联系方式,因此在这里无直接给出QQ答疑号,视频中的源码、资料和作业文档链接统一在购买后从CSDN平台跟我沟通,我会及时回复跟进。注意:本套视频教程包含全套10套作业题,覆盖所有视频知识点,循序渐进,各个击破,作业总纲如下:下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)…… ……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值