zoukankan      html  css  js  c++  java
  • VS2012开发QT技巧总结


    1.      引用模块

    (1)  在新建项目时,如果知道要用到哪些模块,比如SQL、XML等,那么在新建时,就要将这些模块加上。项目新建之后,不要直接点完成(Finish),而是点下一步,然后出现下面的画面。


    (2)  如果项目已经建好了,而随着开发的进行,需要引用到新的模块,这时可以在项目上点击右键->Qt Project Settings->Qt Modules,进入下面的设置界面。勾选上所要的模块,然后点击确定。当然除了,这个方法外,也可以直接在项目设置中通过配置C/C++、链接器等来实现,但这个操作比较复杂,而且不熟悉的一般很难配好。


    2.      语法着色

    在引用了相应的头文件之后,可以使用该头文件所包含的类和相应的方法等,但是有时因为IDE的响应问题,会导致类被标上红色的波浪线,提示找不到类或方法之类的错误。这时有几个方法可以解决。

    (1)  直接关闭IDE,然后重新打开,这时IDE会自动查找所用到的文件,并进行相就的语法着色。

    (2)  如果一个解决方案中有很多个项目时,采用关闭IDE再打开的方法,可能不太适合。这时,可以将相应的项目卸载,然后再重新加载项目。或者是将项目移除,然后再添加进来。

    (3)  如果卸载和重新加载项目显得麻烦,那么我们还可以采用第三种方法:重新扫描解决方案。在项目中点击右键->重新扫描解决方案。


    (4)  需要注意的是,经过前面的几个操作之后,可能需要再待一会儿,语法着色才能正常,因为IDE需要时间响应。如果采用重新扫描解决方案的,可以重复执行几次。

    3.      引用头

    在使用到一些类时,可能因为没有引用相应的头而提示类型不完整或者编译错误等。这时我们需要引用相应的头。一般引用头,直接和类名对应就可以了。比如我们使用了QMessageBox,引用的头就是#include <QMessageBox>。如果我们打开QMessageBox,会发现里面其实就是一个头的引用qmessagebox.h.

    如果没有引用到相应的模块,有可能还需要加上QtCore、QtGui、QtWidgets等作为前置路径,如#include<QtWidgets/QLabel>。如果有引用QtWidget,那么就可以直接写#include <QLabel>

    4.      避免头文件重复引用

    由于编译器会依据引用文件先编译成obj,然后再进行连接。如果有两个文件同时引用了同一个头文件,而这两个文件又被同一个文件再次引用,就会出现同一个头文件在被多次引用导致编译无法通过。这时我们可用采用宏定义(#ifndef--#define--#endif) 来避开。比如头文件是calculate.h,那么在头文件中加入如下的代码。

    #ifndef CALCULATE_H

    #define CALCULATE_H

    class Calculate

    {

    ……

    };

    #endif

    利用宏CALCULATE_H来避开重复引用导致obj的重复生成引发的编译错误。CALCULATE_H是头文件名变成大写,然后加_H来形成一个宏。

    5.      静态方法与静态常量

    (1)  静态方法:在C#中我们可以很文便的通过类名.方法名(Calculate.Sum(1,2))或者类名.变量(Calculate.Result)的形式来调用静态的变量和方法,在C++中如果要这样实现,我们同样也可以使用类中包含静态方法。

    class Calculate

    {

    public:

         static int Sum(int a,int b);

    };

    这样在其他类中调用时可以这样写:Calculate::Sum(1,100).

    (2)  静态常量:有时可能还需要定义静态常量来方便引用,可能会在类中直接这样写:

    class Calculate

    {

    public:

         static const intSIZE_1K=1024;

         static const QStringEXCUEED_RANGE=”Out of range”;

    };

    在引用时可能会这样写Calculate::SIZE_1K,Calculate:: EXCUEED_RANGE。

    在编译时可能可以通过,但在运行时SIZE_1K 没问题,而EXCUEED_RANGE会报错(只有静态常量整形数据成员才可以在类中初始化),见下图。


    那怎么办呢?一种是可以通过写成全局变量来达到目的,另一种可以采用命名空间的形式。比如

    #ifndef CALCULATECONST_H

    #define CALCULATECONST_H

    #include <QString>

    namespace CalculateConst

    {   

        static const QStringEXCUEED_RANGE="Out of range";

    };

    #endif

    在引用的地方这样写CalculateConst::EXCUEED_RANGE.

    6.      DLL调用必须使用全参

    DLL的接口可能有的参数是默认的,但是我们在使用接口时必须使用全部参数,不然会遇到莫名其妙的错误。

    比如接口定义 int Sum(int a,int b=100),虽然参数b默认了100,但我们在接口定义中同样要使用typedef int (* SumFunction)(int a,int b);

    7.      熟用VS的快捷键

    VS中有许多有用的快捷键,可以提高开发效率,对于在VS中开发QT时,同样可以使用。

    8.      借用Qt Designer编辑UI

    VS中没有对QT的UI文件编辑的功能,我们可以通过Qt Designer来编辑UI。在VS中通过添加UI文件,然后双击UI文件,自动链接到QtDesigner中并打开,然后就可以进行相应的编辑了。

    注意

    1)     建议每次只打开一个UI文件,这样便于管理。如果同时双击多个UI文件,将会在同一个Qt Designer中打开,这样不利于编辑。

    2)     UI文件编辑完后进行保存,然后在VS中立即编译所在的项目,这样才会生成对应的ui_xxx.h的文件,便于在cpp文件中去调用在UI中编辑的控件。

    3)     如果双击UI文件没有自动连接到Qt Designer中打开,那么可以对UI文件点击右键->打开方式->选择Qt Designer->设为默认值

    9.      资源文件qrc

    Qt项目中有一个qrc的资源文件,这个和C#中的资源文件有些类似。这个qrc文件是用于引用相应资源的,以便于代码中的使用,特别是跨平台时,尤为重要。

    因为qt是可以跨平台的,而对于文件的引用,在不同的平台中不一样。比如在windows下,我们可以写成F:imagesa.bmp。但是在linux下,没有盘的概念,所以这是肯定不行的。而采用了qrc之后,我们只需这样写”:/images/a.bmp”,这样指示的路径是表明使用的是qrc中的images下的a.bmp,与平台无关。

    对于qrc的编辑,一个是可以采用xml的形式来编辑,一个可以采用Qt Resource Designer来编辑。

    具体可以参看该文VS2012中QT资源文件qrc加载失败(Q_INIT_RESOURCE报错)

     欢迎路过的大牛补充

    转载请注明出处http://blog.csdn.net/xxdddail/article/details/17788773

  • 相关阅读:
    如何解决selenium打开chrome提示chromedriver.exe已停止工作
    移动端弱网测试 fiddle
    android 真机设备识别不出adb interface
    网络基础知识
    《Mongo权威指南》学习手记
    MongoDB数据库备份
    windows下安装mongoDB(zip版)
    ubuntu apt
    docker 免sudo设置(仅3个命令)
    ubuntu18.04双卡机安装ubidia驱动遇到的坑
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7605048.html
Copyright © 2011-2022 走看看