qt笔记2021-4-13 (1、qtcreator项目和vs项目转换 2、qt项目兼容xp系统运行 3、使用提升为来替换控件类)

44 篇文章 8 订阅
1、qtcreator项目和vs项目转换:

关于vs的安装,我电脑里已经装了好几个版本的vs了,不想再装了,可以参考这里:vs2015安装
配置vsqt环境可以参考这里:qt环境

qtvs项目的转换我发现已经有现成的工具了,下面采取Qt vs Tools来转换项目。

(1)安装Qt vs Tools:

下载vs中的qt插件,从清华镜像下载速度快一些:https://mirrors.tuna.tsinghua.edu.cn/qt/archive/vsaddin/

选好插件版本后,一定要按照自己的msvc版本下载。下载完按照指示安装,它会自动添加到vs中去的。重新打开vs就可以在菜单栏看到Qt vs Tools的菜单了。

在这里插入图片描述

(2)qtcreator项目转vs:

使用Qt vs Tools中的Open Qt Project File(.pro)打开Qt项目的.pro文件,就能完成Qt项目的导入了。直接导入可能会有一些链接库路径问题导致的报错,就需要自己手动修正。
在这里插入图片描述
导入后,会在项目中生成一些vs的文件,但是好像并不影响再用Qt creator来打开项目。

(3)vs转qtcreator:

vs右侧选中项目,点击Qt vs Tools中的create Basic .pro File
在这里插入图片描述
然后会出现导出项目的选项:
在这里插入图片描述

左侧生成.pri文件和创建完打开创建的文件两个选项可选可不选。右边的project tag,下拉会有很多选项,一开始我以为需要一个一个去设置,后来发现也是可以不选的,直接点OK,然后.pro文件就会生成了。
在这里插入图片描述
然后使用qtcreaor打开这个.pro文件,转换后的项目第一次会让你选择kits,最好选择和vs一样版本的msvc吧,用mingw打开会怎样我没试过。


有些项目在没有得到良好的配置情况下,就导致Qt vs Tools无法将它识别为Qt项目,然后按钮灰色无法生成.pro文件。

(4)注:

直接在两个软件之间的转换以后进行编译和运行可能会报一些错,多半是一些链接库的路径问题。尤其是多机之间项目转换,由于环境变量不同,就可能找不到某些使用的dlllibrary,就需要自己手动修改环境变量或路径。不过可以通过把使用到的链接库一起拷贝过来,然后项目中的一些路径都使用相对路径来解决。

其余遇到的问题可以参考:https://blog.csdn.net/zyhse/article/details/105391291

2、qt项目在xp系统运行:

需要使用32位也就是x86版本的msvcmingwQtCreator版本建议选择版本较低的。

我的方案是直接下载Qt5.6.3,下载地址:https://download.qt.io/new_archive/qt/5.6/5.6.3/

比如是vs2015,所以我可以下载下面两个版本kitsQt下载:
在这里插入图片描述
要下载其他版本的,就把这个下载地址后面的版本去掉。

如果是下载mingw版本,则可以直接使用,编译并打包完,就可以拿到xp上运行了。但是考虑到有些链接库是不支持mingw的,比如halcon,就只能使用msvc了。如果使用msvc的话,还需要在.pro文件中添加下面的代码:

win32 {
    QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01
    QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE,5.01
    
    DEFINES += _ATL_XP_TARGETING
    QMAKE_CFLAGS += /D_USING_V140_SDK71_
    QMAKE_CXXFLAGS += /D_USING_V140_SDK71
    LIBS *= -L"%ProgramFiles(x86)%/Microsoft SDKs/Windows/7.1A/Lib"
    INCLUDEPATH += "%ProgramFiles(x86)%/Microsoft SDKs/Windows/7.1A/Include"
    #QMAKE_TARGET_OS = xp
}

这段代码来自:https://www.jianshu.com/p/b954f57f1478

xp上运行:
在这里插入图片描述

3、提升控件的class:

以前一直不知道这个提升为是干嘛的,后来发现可以使用提升为来对控件类进行自定义。
在这里插入图片描述
做个演示

首先在项目中创建一个class,名字text
在这里插入图片描述

text.h中添加其基类为QLabel

#pragma once

#include <QLabel>
#include <QMouseEvent>
#include <QDebug>
class text : public QLabel
{
    Q_OBJECT
public:
    explicit text(QWidget *parent = NULL);
    ~text();
protected:
    virtual void enterEvent(QEvent *e);
    virtual void leaveEvent(QEvent *e);
};

text.cpp中添加鼠标事件和属性:

#include "text.h"

text::text(QWidget *parent)
    :QLabel(parent)
{
    this->setStyleSheet("background-color:rgb(255,0,255);");
}

text::~text()
{}

void text::enterEvent(QEvent *e)
{
    qDebug()<<u8"鼠标移入";
}
void text::leaveEvent(QEvent *e)
{
    qDebug()<<u8"鼠标移出";
}

ui中添加一个QPushButton,然后右击这个button,选择提升为:
在这里插入图片描述
这里基类可以理解为该提升为的类能作用的控件类,提升的类名称和其所包含的头文件按照刚刚创建的创建的类来写。全局包含决定#include<>添加,还是""添加。

可以点击添加,之后再右击pushbutton将其提升为text,提升完成后,这个按钮就会变成class名为textlabel了。再右击可以选择取消提升。

运行后
在这里插入图片描述
刚才设置的背景颜色和enterrelease事件就作用于pushbutton了,同时,它变成了一个label

打开ui_mainwindow.h可以看到,提升为实际就是从:
在这里插入图片描述在这里插入图片描述

变成了:
在这里插入图片描述在这里插入图片描述
同时,可以看到,由于之前勾选了全局包含,所以这里引入text类的方式是<>
在这里插入图片描述
去掉勾选,并重新构建,然后打开ui_mainwindow.ui,就发现引入方式变成""了:
在这里插入图片描述

直接使用记事本打开ui文件,然后修改class好像也能达到这样的效果,但是似乎会引起一些未知的错误,所以不推荐了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值