一、安装所需软件
           1.   下载安装VS2008;
           2.   下载qt-win-opensource-4.7.0-vs2008.exe,并安装。这里我们假设安装在C:\Qt4.7.0下;
           3.   下载qt-vs-addin-1.1.7.exe,并安装。
            这三个软件安装好后,在VS的菜单界面上就会出现"QT"选项了。
 
 二、环境配置
         1.   用VS新建一个win32控制台应用程序,我们假设工程名为:Hello。
         2.   选择工具->选项->项目和解决方案->VC++目录。
               (1)  选择“可执行文件”,在里面添加:C:\Qt4.7.0\bin;
               (2)  选择“包含文件”,在里面添加:C:\Qt4.7.0\include;   C:\Qt4.7.0\include\Qt;   
                      C:\Qt4.7.0\include\QtCore;   C:\Qt4.7.0\include\QtGui
               (3)  选择“库文件”,在里面添加:C:\Qt4.7.0\lib;
 
三、开始编程 (这里举一个简单的例子)
         1.     选择菜单上的“QT”选项- >“Launch Designer” ,启动designer : 放入一个“label”,内容
                 写为:helloQT。然后保存为Hello.ui,再将它添加到源文件中。
                 右击“Hello.ui”->“属性”->“自定义生成步骤”:
                             命令行:uic.exe Hello.ui -o HelloUi.h
                             输出:HelloUi.h
                             附加依赖项:uic.exe; Hello.ui
                 然后,点击“确定”。这时再右击“Hello.ui”,选择“编译”,则会生成HelloUi.h。
                 将它添加到工程 中。
         2.   在Hello.cpp中编写代码如下:
  1. #include "stdafx.h"
  2. #include "HelloUi.h"
  3. #include <QtGui/QApplication>
  4. #include <QtGui/QMainWindow>
  5. int _tmain(int argc, _TCHAR* argv[])
  6. {
  7. QApplication app(argc,argv);
  8. QMainWindow *dlg=new QMainWindow();
  9. Ui::Form ui;
  10. ui.setupUi(dlg);
  11. dlg->show();
  12. return app.exec();
  13. }
         3.   选择“项目”,“Hello属性”,“配置属性”:
               (1)  “常规”:选择“字符集”为“使用多字节字符集”;
               (2)  “调试”:填写“环境”值为:PATH=C:\Qt4.7.0\bin;
                              填写“合并环境”值为:是;
               (3)  “链接器”:进入“常规”选项,填写“附加库目录”为:C:\Qt4.7.0\lib;
                                进入“输入”选项,填写“附加依赖项”为:qtcore4.lib qtgui4.lib
                               (注意,这两个库之间为空格,不能写逗号)
四、 信号与槽

信号与槽的使用,需要用到moc(即meta object compiler)。
    这是因为:当要在GUI中用到信号与槽,就需在.h文件中的类里写入Q_OBJECT宏。而任何含有Q_Object的类都必须使用Qt的moc工具生成对应的cpp文件,然后在项目里面包含这个cpp,编译才能成功,否则会出错链接错误,如下。
    总结:
    1) Qt中的元对象系统是用来处理对象间通讯的信号/槽机制、运行时的类型信息和动态属性系统。
    2) moc读取C++源文件(应该是.h头文件吧)。如果它发现其中包含一个或多个类的声明中含有Q_OBJECT宏,它就会给含有Q_OBJECT宏的类生成另一个含有元对象代码的C++源文件。这个生成的源文件可以被类的源文件包含(#include)到或者和这个类的实现一起编译和连接。

下面开始编程:
    A 编写 main.cpp

  1. #include "stdafx.h"
  2. #include <QtGui/QApplication>
  3. #include "hello.h"
  4. int _tmain(int argc, _TCHAR* argv[])
  5. {
  6. QApplication app(argc,argv);
  7. Widget w;
  8. w.show();
  9. return app.exec();
  10. }
 

   B 编写 hello.h

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <stdio.h>
  5. namespace Ui {
  6. //class Widget;  //1 把Widget换成Form (共3处)
  7. class Form;
  8. }
  9. class Widget : public QWidget {
  10. Q_OBJECT
  11. public:
  12. Widget(QWidget *parent = 0);
  13. ~Widget();
  14. protected:
  15. void changeEvent(QEvent *e);
  16. private:
  17. //Ui::Widget *ui; //2 把Widget换成Form (共3处)
  18. Ui::Form *ui;
  19. public slots:
  20. void on_pushButton_clicked(void);
  21. };
  22. #endif // WIDGET_H

C 编写 hello.cpp

  1. #include "stdafx.h"
  2. #include "hello.h"
  3. #include "ui_hello.h"
  4. //#include "moc_hello.cpp"   //不是头文件,不可以加此句
  5. Widget::Widget(QWidget *parent) :
  6. QWidget(parent),
  7. //ui(new Ui::Widget)  //3 把Widget换成Form (共3处)
  8. ui(new Ui::Form)
  9. {
  10. ui->setupUi(this);
  11. }
  12. Widget::~Widget()
  13. {
  14. delete ui;
  15. }
  16. void Widget::changeEvent(QEvent *e)
  17. {
  18. QWidget::changeEvent(e);
  19. switch (e->type()) {
  20. case QEvent::LanguageChange:
  21. ui->retranslateUi(this);
  22. break;
  23. default:
  24. break;
  25. }
  26. }
  27. void Widget::on_pushButton_clicked(void)
  28. {
  29. ui->label->setText("liangbing8612.blog.51cto.com");
  30. printf("liangbing8612.blog.51cto.com");
  31. }

    D 制作.ui文件,并生成ui_hello.h
    打开designer,拖入一个pushButton,一个label。保存为hello.ui。然后生成ui_hello.h,并添加到项目的源文件中。

编译运行,则出现如下错误:
错误 1 error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Widget::metaObject(void)const " (?metaObject@Widget@@UBEPBUQMetaObject@@XZ)  
错误 2 error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall Widget::qt_metacast(char const *)" (?qt_metacast@Widget@@UAEPAXPBD@Z)  
错误 3 error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall Widget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Widget@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
错误 4 fatal error LNK1120: 3 个无法解析的外部命令  
    
    这是因为在源文件中没有添加上moc_hello.cpp文件。
    解决方法:右击hello.h,选择“自定义生成步骤”,“常规”
    命令行:moc.exe hello.h -o moc_hello.cpp
    输出:moc_hello.cpp
    附加依赖项:moc.exe hello.h
    确定,然后,右击hello.h,选择 “编译”,则在文件夹中生成moc_hello.cpp,再将其添加到源文件中。
   
    然后,运行程序,出现错误:
    错误  fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”? 
    则在moc_hello.cpp文件的开头添加上:#include "stdafx.h"。
    然后,再运行。仍然出现上面错误。这是因为当运行程序,又重新生成了moc_hello.cpp文件(这个新的文件的开头显然是没有#include "stdafx.h"),覆盖了已经修改过的文件。
    解决方法:右击hello.h,选择“自定义生成步骤”,“常规”
    清空“命令行” “输出” “附加依赖项” 里对应的内容。这样在运行程序时就不会再生成新的moc_hello.cpp文件了。然后确定。
 
    这样再次运行程序,可以成功运行。运行结果如图。

在VS2008中使用Qt编程(转)的更多相关文章

  1. VS2008中MFC界面编程Caption中文全是乱码的解决办法 -转载

    一.问题 在预览状态下可能看到中文,但是编译运行后对话框中的中文全是问号.即使你用的VS中文版,即使你也用了Unicode编码,即使有条件编译 #ifdef _WIN32LANGUAGE LANG_C ...

  2. 配置VS2008下的Qt开发环境有感

    写一篇小小的日志为了在VS2008中安装Qt的插件,花了我很多的时间.1.vs2008在win7中破解问题我的VS2008已经安装好了,不知道为何,当初没有破解,现在只剩下15天限制了.于是为了破解, ...

  3. QT中的SOCKET编程(QT-2.3.2)

    转自:http://mylovejsj.blog.163.com/blog/static/38673975200892010842865/ QT中的SOCKET编程 2008-10-07 23:13 ...

  4. Visual Studio下Qt编程中对中文的处理

    Visual Studio下Qt编程中对中文的处理 本文为原创文章,原文地址http://www.cnblogs.com/c4isr/p/qt_develop_in_vs.html Visual St ...

  5. 在windows下的QT编程中的_TCHAR与QString之间的转换

    由于在windows下的QT编程中,如果涉及到使用微软的API,那么不可避免使用_TCHAR这些类型,因此在网上查了一下,其中一个老外的论坛有人给出了这个转换,因此在这里做一下笔记 : )#ifdef ...

  6. 在Ubuntu18.04中QT编程的环境构建(转)

    在Ubuntu18.04中QT编程的环境构建 原点分析 百家号06-2110:14 如果说QT大家觉得陌生的话,那么 Windows 早年推出的C++图形用户界面的应用程序开发框架MFC,应该是耳熟能 ...

  7. QT安装在VS2008中的方法

    (一)工欲善其事,必先利其器,废话不多讲. 原文:http://www.cnblogs.com/zwq194/archive/2011/02/19/1958713.html 总结起来网上流行的VS20 ...

  8. QT中的SOCKET编程

    转自:http://mylovejsj.blog.163.com/blog/static/38673975200892010842865/ QT中的SOCKET编程 2008-10-07 23:13 ...

  9. qt编程入门

    面对qt编程,必须先知道qt中常用的类: QPushButton按钮类.QLabel标签类.QMessageBox对话框类.QCheckBox.QAction.QMenu.QStatusBar.QTo ...

随机推荐

  1. RK平台images打包细则【转】

    本文转载自;https://blog.csdn.net/wangxueming/article/details/52808739 IMGs打包细节 平台: RK3288 背景: RK3288编译产生了 ...

  2. 鸟哥的linux私房菜 - 第三章 主机规划与磁盘分区

    各硬件装置在linux中的文件名 在linux系统中,每个装置都被当成一个档案来对待. 常见的装置与其在linux中的档名: 磁盘分区 磁盘链接的方式与装置文件名的关系 个人计算机常见的磁盘接口有两种 ...

  3. Cocos2d-x中单例的使用

    大家都知道一个程序中只有一个导演类,eg: CCDirector *pDirectory = CCDirector::sharedDirector();//初始化导演类. 可通过 pDirectory ...

  4. YYYY-mm-dd HH:MM:SS 备忘录

    d 月中的某一天.一位数的日期没有前导零. dd 月中的某一天.一位数的日期有一个前导零. ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义. dddd 周中某天的完整名 ...

  5. HDU-6035:Colorful Tree(虚树+DP)

    这里有三道长得像的题: 一:HDU6036: There is a tree with nn nodes, each of which has a type of color represented ...

  6. hdfs 查看报告--命令(hdfs dfsadmin -report)

    [hadoop@master sbin]$ hdfs dfsadmin -reportConfigured Capacity: 8202977280 (7.64 GB)Present Capacity ...

  7. AtCoder Grand Contest 013 C:Ants on a Circle

    题目传送门:https://agc013.contest.atcoder.jp/tasks/agc013_c 题目翻译 给你一个周长为\(L\)的圆,有\(N\)只蚂蚁在圆上爬,速度为一单位距离每秒. ...

  8. Codeplus2017 11月赛T3——基因

    题目:https://www.luogu.org/problemnew/show/P4059 DP,状态应分为空格或字母,可用0和1表示,据此转移,详见代码. 另:注意初始化,因为有负值所以要先把f数 ...

  9. 创建自己的YUM仓库

    1. 首先,假定我们应用的名字叫helloworld(可以参考简单 RPM 包制作来创建两个版本helloworld安装RPM包,helloworld-1.0.0-1.el6.x86_64.rpm和h ...

  10. 15 Vue项目部署

    前言: VUE 是一个javascript的前端框架,注定了它是运行在浏览器里的,对服务器本地没有任何要求,只要一个静态文件服务器能通过http访问到其资源文件就足矣!无论你是用apache ,ngn ...