学习Qt过程中的一些想法

最近在看《Qt Creator快速入门》 一书,以前也用过Qt,但就像半路出家的和尚,很多部件并不知道作用也没用过,有时为实现某种效果遇到困难时去百度,即使实现了往往知其然而不知其所以然。所以才准备看这本书,看了也收获颇丰。

总结一下我今天的一些感想,也是之前不太理解的地方。

(1)以前经常实现自己的某个窗口或部件时,都会写自己的类,当然框架它会自己生成。

(1)class MyLineEdit : public QLineEdit
(2){
(3)   Q_OBJECT
(4)public:
(5)    explicit MyLineEdit(QMainWindow *parent = 0);
(6)
(7)signals:
(8)
(9)protected:
(10)    void keyPressEvent(QKeyEvent *event);
(11)
(12)public slots:
(13)};

(1)第一句public QLineEdit表明它继承的父类是QLineEdit

(2)第二局在这个类里面使用了宏Q_OBJECT,这个宏的作用是为了让你能用信号与槽的机制。

(3)第五句explicit关键字是为了防止构造函数的隐式转化,什么是隐式转化取个栗子:

      CExample objFour = 12; //执行了隐式转换,等价于CExample temp(12);objFour(temp);  至于Qt构造函数为什么写上它,是希望所有构造函数都被显式调用

(4)构造函数的形参类型QMainWindow是由父窗口的类型决定的,比如MyLineEdit p = new MyLineEdit(this);this是哪种类的类内指针,构造函数就是的类型就是哪种类,至于=0的意思就是可以不写这个参数

 (5) Qt的父类和父对象是两种不一样的概念,父类对应的是c++中的继承,父对象是Qt巧妙的构造方法,这种机制有一种好处:在Qt中,当以QObject为父类的对象析构时,他会自动删除它所包含的所有子对象,实现了简单的垃圾回收机制,避免了内存泄露。所以开发时可以考虑,每个new出来的对象尽量设置父对象,这样即使未显示调用delete,只要保证父对象被析构,就能避免内存泄露。

上面的话是网上摘录的,说的特别好,就复制过来了。

而Qt构造函数初始化列表一般有这句QLineEdit(parent),这个就是为了调用父类的构造函数,当然生成父类对象依旧是在这个垃圾回收机制内的,看到这个参数parent就清楚了


(6)窗口和部件时不一样的,窗口有边框和标题,部件没有,在窗口的构造函数内写上几句话

QLineEdit *p1 = new QlineEdit(this);

QWidget *p2 = new QWidget(this);

当main.cpp函数内调用父窗口的show函数时,你会发现p1显示在父窗口,但p2没有显示,但如果你在构造函数内加一句p2->show(); p2也会显示。

大体可以这么解释,QWidget是顶级窗口部件(有边框标题的窗体),不特殊设置不会被嵌套到其他窗口,而lineEdit属于窗口部件,父窗口的show函数会显示对象内所有可以在父窗口显示的子窗口和父窗口本身,除此之外的顶级窗口请另行show。更形象的说法是Widget MainWindow之类的是容器,而label lineEdit是放在容器内的东西,一个容器的show只能看到这个容器和容器内的东西,而看不到其他。

除此之外,在新窗口的构造函数中加上这句话:setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);hide();另可以使用move移到合适位置。此位置相对于父窗口而言,而非桌面或者其他窗口或者使用dockwidget也可以实现窗口嵌套


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_26654257

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

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

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

打赏作者

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

抵扣说明:

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

余额充值