Qt编程最佳实践21项(一)

C. Probst, Oct 2008

来自ICSNetwork视频,Zhuotong Nan(zhn1@pitt.edu) 整理。原视频地址:http://www.ics.com/learning/icsnetwork_webinar/flash/8

最佳实践1,动手写代码前

实现一个任务前,先翻一下例子程序,Qt solutions(Qt提供的一些解决方案库,有商用也有开源的),Trolltech(Qt的开发商,现在被Nokia收购)及其合作伙伴提供的解决方案,以及开源项目等。

可能有一些与你的需求类似的项目已经存在,另外Qt提供的例子程序值得一看,一般例子程序都演示了比较好的实现方式。在使用这些已有代码前,请检查许可条件,比如是不是GPL,还是商用的,要与你的项目保持一致。

最佳实践2,调查Qt提供的其它模块和框架

除了GUI(图形用户界面)编程支持,Qt还提供了支持一些关键技术的独立于平台的其它API,比如多线程、网络、XML、图形、OpenGL、SQL等。

你需要实现的功能已经可能包括在这些模块里,仔细阅读文档,Qt有很好的文档,从中可以得到你关心的信息。

最佳实践3,了解qmake

qmake可以极大简化编译过程。使用qmake -project也可以产生很多项目文件。它可以生成makefile,nMake makefile等。同时也支持生成visual c++, vs .net, MacOS Xcode项目文件。

但同时也需要认识到qmake在操作大而复杂的项目(比如涉及不同的编译器,相互连接)时可能会有一些限制,这时可以试试比如cmake等。

最佳实践4,用new创建QObject并且指定一个父指针

除非你明确你创建的对像的生命周期只限制在这个生成对像的方法中,否则都用new对创建一个从QObject派生出来的对像,并且指定一个父指针。这样不至于代码在离开这个方法时,就销毁了这个对像,而这往往不是你期望的。

指定一个父对像指针,当这个父对像被销毁时,这个对像也自动被销毁。

保证全部的QObject对像都有一个父对像,这样确保全部的QObject对像最终都可以被销毁。

一个例子,

QLabel aLabel(this);
aLabel.setText(“this is really important”);
aLabel.show(); //当离开这些代码在的函数时,这个Label对像就消失了

QLabel* aLabel =new QLabel(this);
aLabel->setText(“this is really important”);
aLabel->show(); //这个标签对像只有当父对像(this)被销毁时,才会被销毁

最佳实践5,不要多重继承QObject

不要从QObject或其子类上多重继承,Qt不支持这种方式。

最佳实践6,了解QDialog::exec()和QWidget::show()的区别

刚学习Qt时可能会混淆这两者,两者有类似的作用,但也有显著的区别。QWidget::show()将widget(QDialog是QWidget的子类)和它的子对像显示出来;QDialog::exec()是一种有模显示方式,也是将其和子类显示出来,但这时用户除非关闭这个对话框,不能与其它窗体交互。

QWidget类是用户界面类的子类;QDialog也是从QWidget上派生出来的,用于获取用户输入的数据。

最佳实践7,在写定制的图形控件时,确保没有现成的已经存在

Qt里的全部GUI对像,事实上都是定制的控件,与用户自己写的没啥区别。Qt已经提供了很多有用的控件,比如QCalendar、QTooltip、QTabWidgets、QDateEdit、QTimeEdit等。如果已经有现成的,尽量用它们,毕竟它们经过了完整的测试。

写一个定制的控件时,需要重实现QPaintEvent,以及使用QPainter类。

当然,如果你需要的控件是独一无比,除了自已写就别无选择了。不过需要注意写控件是不容易的,需要小心的设计和大量的努力。

(待续)

Read on mobile:qr code

Leave a Reply

Your email address will not be published. Required fields are marked *