VS写Qt和Qt Creator的区别

新公司用vs2017写Qt,以往用惯了Qt Creator有点不熟悉,陆续记录一下其中遇到的坑。

 

ui文件在更改后未更新

右键.ui文件,重新编译一下,然后再右键项目,选择重新扫描解决方案即可。

 

从网上粘贴上去的代码,ui-> 相关的代码全部报错

这个情况是因为二者声明ui文件的方式不一样,把  -> 改成 . 即可。

Ui::Widget ui;                    //VS

Ui::Widget *ui;                   //Qt creator

 

类文件的包含

二者对于Qt中类的包含上有一些区别,比如说要include按钮这类控件,二者的包含方式分别如下:

#include   //vs
#include     //Qt Creator

其实二者是一样的东西,在Qt Creator中转到QPushButton的定义,结果是这个样子的。

 

qDebug()没有任何输出

这个情况是因为vs写Qt默认不弹出黑窗口(控制台),右键项目名称(不是解决方案名称),点击最下面的属性,然后根据下图设置一下弹出控制台即可。

VS写Qt和Qt Creator的区别_第1张图片

 

Designer中控件没有转到槽的选项

这个确实很麻烦,以往Qt Creator的转到槽操作真的很方便,在vs中可以通过代码或者在Designer界面编辑槽的操作来实现信号槽,如下面步骤所示,其中第4步的槽函数名称需要手写,并且在代码中还得再声明,定义一遍。

private slots:
    void pushbutton_on_Clicked();

VS写Qt和Qt Creator的区别_第2张图片

 

信号槽正常连接了但黑窗体输出No matching signal……

这是因为槽函数的命名导致Qt使用了信号槽隐式连接方式。如果采用显式 connect的方法的同时,又将槽函数的名字起成了“on_控件名_信号名”的格式,那么就会在运行时弹出 “QMetaObject::connectSlotsByName: No matching signal for”的警告。

connectSlotsByName 是一个QMetaObject类里的static函数,其定义如下:static void connectSlotsByName(QObject *o);其作用是如其名称一样,用来将QObject *o里的子QObject的某些信号按照其objectName连接到o的槽上,接着QMetaObject::connectSlotsByName()这个函数会在ui->setupUi(this);里被调用执行。

 

用VS写Qt从Debug切换到Release时编译出错,error C1002: 在第 2 遍中编译器的堆空间不足

关闭vs,然后找到x64 x86兼容工具命令提示符(或本机命令工具提示),然后cd到项目目录中,输入你的项目名称.slnxxxxx.sln,然后回车即可,重新用vs打开解决方案即可正确编译。

VS写Qt和Qt Creator的区别_第3张图片

若编完Release再切换到Debug发现编译失败,关闭vs重新打开该解决方案即可。 

你可能感兴趣的:(Qt,vs写Qt)