MFC中调用QT类库

来源:互联网 发布:评价火星哥的唱功知乎 编辑:程序博客网 时间:2024/05/20 23:08

前面已经讲过了QT在VS2005平台的安装与编译。

具体见http://tianjiangood.blog.163.com/blog/static/2601115620085625458948/

        经过几天的学习,感觉QT功能很强大哈。封装的类库中比较完善。可以完全象MFC那样单独使用。也可以作为MFC的一个补充。QT可以象调用其他其他用C++写的类一样调用。

       只不过可能比较复杂,关键是头文件还有库文件的确定。QT相应的类的头文件名与类名相同,可以在QT安装目录下的include目录下直接搜索相应的文件名,得到文件路径。库文件的确定可以从库文件的命名方式理解,库文件都是按照功能来命名的,主要的库文件是QTCore4.lib,QtGui4.lib,QTCored4.lib,QtGuid4.lib。(声明我的QT版本是QT4.3.4)。同时程序发布必须包含与库文件同名dll文件。这个大家应该都知道,哈哈。头文件的包含工作可以写在VC项目中的stdafx.h中。下面以两个例子具体介绍一下。

      两个例子分别是在MFC对话框按钮消息响应 :弹出一个QMessageBox对话框,弹出一个用采用自定义的QT对话框。

        一.  由于开发的是GUI应用程序,所以必须包含QApplication对象,因此必须包含头文件QApplication.h.否则会程序会异常终止运行。QApplication对象必须是全局的,因此定义QApplication的工作可以在MFC应用程序对象定义之前。

          另外应用程序使用的字符集的声明,一般情况下应用程序的菜单,按钮,标签等均为中文字符,这就需要支持中文字符,需要在应用程序启动之前实现,因此可以在MFC应用程序对象的构造函数中实现,同时需要包含头文件QTextCodec.h,具体语句如下:QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));现在的PC平台必须支持GB18030。如果不加这个可能中文显示为乱码。

         二. 弹出QMessageBox对话框实例。这个比较简单,这个只需要包含QMessageBox的声明头文件QMessageBox.h即可,

        QMessageBox dlg;
        dlg.setIcon(QMessageBox::Question); 

        dlg.warning(0,QObject::tr("waring"),QObject::tr("this is messagebox used by qt create!"),QMessageBox::Ok)

        三.弹出自定义对话框(不放假设类名为MYDlg)。并且自定义对话框支持信号和槽。所以必须有Q_OBJECT宏。这里必须提一下QT的元对象系统(Meta_Object System),在该模型的基础上,提供了对象间通信机制:信号和槽。元对象系统基于三个事实:

        1.基类QObject,任何想使用元对象系统的对象必须直接或者间接继承自QObject;

        2.Q_OBJECT宏,Q_OBJECT宏必须出现在类的私有声明区,以启动元对象的特性;

        3.元对象编译器(Meta_Object Compiler,moc),为QObject子类实现元对象提供必要的代码实现。以MyDlg.h为例说明,在编译应用程序时,moc会根据自定义的类产生另一个C++源文件,默认的名字为moc_MyDlg.cpp,改源文件包含了元对象代码的实现。

       因此必须把该文件添加到VC工程中,否则会出现连接错误,找不到类的定义VC2005为link2001错误。

       而该文件得到的方法是,如果MyDlg.h,MyDlg.cpp文件已经存在, 利用qmake生成一个包含MyDlg类的工程,同时用相应的C++编译器编译,得到moc_MyDlg.cpp文件。估计应该还有更简单的方法得到moc文件。

      总结:实际上,QT也是一个用标准的C++语法写的一个类库,但同时又在标准C++的基础上增加了一些特性,如信号和槽。

     上述文字属于个人经验,由于刚接触QT,难免有不足之处,恳请批评指出。

原创粉丝点击