Qt中继承QMainwindow的派生类,显式调用构造函数?该怎么理解,求大牛解惑!

zycxnanwang
博客专家认证
2016-06-16 11:31:46
在C++primer 中 派生类显式调用基类的构造函数可以一下两种

RatedPlayer::RatePlayer(cosnt TableTennisPlayer &tp):TableTennisPlayer(tp) {}

RatedPlayer::RatePlayer(const string &fn,const string &ln,bool ht):TableTennisPlayer(fn,ln.ht) {}

RatedPlayer是派生类而TableTennisPlayer是基类

为什么在Qt中不可以这样呢

Mainwindow::Maniwindow(const QMainWindow &tp):QMainWindow(tp) {}

//Mainwindow为继承于QMainWindow的派生类

Qt报错,说无法访问private成员! 搞不懂,求解惑!
...全文
469 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Little柯南 2016-06-16
  • 打赏
  • 举报
回复
QMainWindow(QWidget * parent = 0, Qt::WindowFlags flags = 0) 以上是Qt构造函数表现形式。Qt虽然使用的是C++,但是也有很多地方具体细节有他自己的风格与定义; 比如: C++继承C风格照样使用char*与const char*,Qt使用QbyteArray可以替代这些,反而更方便; Qt构造函数一般都有parent,这是继承QObject, inline QObject *parent() const { return d_ptr->parent; },但是纯C++没有; 所以,Qt是基于C++编程方式的一套框架,但他不是纯粹的C++。 说道自己认识:反而觉得Qt更像是以C++方式作为编程方法,却借鉴Java各种类从而编写的一套更系统的框架
冷静忍耐 2016-06-16
  • 打赏
  • 举报
回复
一般继承谁,我们就调用谁的。 例如:我们继承了QToolButton MyButton::MyButton(QWidget *parent) : QToolButton(parent) {}
冷静忍耐 2016-06-16
  • 打赏
  • 举报
回复
引用 3 楼 zycxnanwang 的回复:
@冷静忍耐 我查了一下Qt assistant的Q_DISABLE_COPY,发现Qt不允许调用拷贝构造函数和赋值运算符,把他们声明 为了private,不允许外部调用,这样做的目的是什么? 对于QWidget的派生类,只能调用基类的构造函数进行基类的初始化吗?
不能通过拷贝或者赋值操作,可能是因为:如果允许这样,那通过拷贝出来的都是同一个控件。 这样可能导致你的信号与槽、事件等Qt特性混乱。 例如:一个按钮的点击信号。外部connect了这个信号,如果有几个相同的按钮(通过拷贝出来的都是同一个控件),那就不能区分是哪个按钮发的信号了??
zycxnanwang 2016-06-16
  • 打赏
  • 举报
回复
@冷静忍耐 我查了一下Qt assistant的Q_DISABLE_COPY,发现Qt不允许调用拷贝构造函数和赋值运算符,把他们声明 为了private,不允许外部调用,这样做的目的是什么? 对于QWidget的派生类,只能调用基类的构造函数进行基类的初始化吗?
冷静忍耐 2016-06-16
  • 打赏
  • 举报
回复
Qt中本来是可以的,只是动了Qt点手脚,每个类都对应了一个private的类,例如QWidget就对应了一个QWidgetPrivate。 Qt使用了这个Q_DISABLE_COPY,导致你不能这样 当然只是继承自QObject的类不能这样做,自己写的随便。 你在qt帮助手册查这个你就知道了:Q_DISABLE_COPY

16,238

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧