VS联合QT编程

VS联合QT编程

一、配置VS2015和QT环境及新建项目

1.1 参考VS2015与Qt5.11配置
下图是建立的64bit的程序
在这里插入图片描述
1.2 在ui界面上添加如下控件
在这里插入图片描述

二、建立qt-designer与VS中代码的关系

1 在VS程序文件内创建槽函数,然后在qt-designer界面构建控件与槽函数的关联QT入门级小项目(vs2015+qt designer混合编程)

2 槽函数的创建和与信号的关联都采用VS中程序实现
在DialPlateShow64bit.h文件中添加如下代码:

#pragma once

#pragma execution_character_set("utf-8")   //防止中文乱码

#include <QtWidgets/QMainWindow>
#include "ui_DialPlateShow64bit.h"
#include "dialplate.h"

class DialPlateShow64bit : public QMainWindow
{
    Q_OBJECT

public:
    DialPlateShow64bit(QWidget *parent = Q_NULLPTR);
	~DialPlateShow64bit();

private:
    Ui::DialPlateShow64bitClass ui;

	private slots:
	void sliderValueChanged(int);
	void bigDiviValueChanged(int);
	void bigDiviValueChanged(QString);
	void smallDiviValueChanged(int);
	void smallDiviValueChanged(QString);
	void scaleValueChanged(int);
	void scaleValueChanged(QString);
	void on_btn_Init(void);
	void on_btn_Init(bool isInit);

};

在DialPlateShow64bit.cpp文件中添加如下代码:

#include "DialPlateShow64bit.h"
#include<qstring.h>

DialPlateShow64bit::DialPlateShow64bit(QWidget *parent)
    : QMainWindow(parent)
{
	ui.setupUi(this);
	//不推荐使用:信号或者槽函数写错无法检测出来
	//connect(ui.hSlider_value, SIGNAL(valueChanged(int)), this, SLOT(sliderValueChanged(int)));
	//connect(ui.hSlider_value, SIGNAL(valueChanged(QString)), this, SLOT(sliderValueChanged(QString)));

	//推荐使用
	connect(ui.hSlider_value, &QSlider::valueChanged, this, &DialPlateShow64bit::sliderValueChanged);

	//遇到信号和槽函数重载
	//1 采用实例化一个函数指针
	void (QSpinBox::*spinIntSignal)(int) = &QSpinBox::valueChanged;

	void (DialPlateShow64bit::*bigDiviIntSlot)(int) = &DialPlateShow64bit::bigDiviValueChanged;
	connect(ui.spBx_bigDivi, spinIntSignal, this, bigDiviIntSlot);

	void (QSpinBox::*spinQStringSignal)(const QString &) = &QSpinBox::valueChanged;

	void (DialPlateShow64bit::*bigDiviQStringSlot)(QString) = &DialPlateShow64bit::bigDiviValueChanged;
	connect(ui.spBx_bigDivi, spinQStringSignal, this, bigDiviQStringSlot);

	//2 将信号强制转换为函数指针
	connect(ui.spbx_smallDivi, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), 
		this, static_cast<void (DialPlateShow64bit::*)(int)>(&DialPlateShow64bit::smallDiviValueChanged));

	connect(ui.spbx_smallDivi, static_cast<void (QSpinBox::*)(const QString &)>(&QSpinBox::valueChanged),
		this, static_cast<void (DialPlateShow64bit::*)(QString)>(&DialPlateShow64bit::smallDiviValueChanged));

	connect(ui.spbx_scale, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), 
		this, static_cast<void (DialPlateShow64bit::*)(int)>(&DialPlateShow64bit::scaleValueChanged));

	connect(ui.spbx_scale, static_cast<void (QSpinBox::*)(const QString &)>(&QSpinBox::valueChanged),
		this, static_cast<void (DialPlateShow64bit::*)(QString)>(&DialPlateShow64bit::scaleValueChanged));
	
	//QPushButton的clicked信号其实不算重载信号,只是在定义该信号时添加了默认值
	connect(ui.btn_Init, &QPushButton::clicked,
		this, static_cast<void (DialPlateShow64bit::*)()>(&DialPlateShow64bit::on_btn_Init));

	connect(ui.btn_Init, static_cast<void (QPushButton::*)(bool)>(&QPushButton::clicked), 
		this, static_cast<void (DialPlateShow64bit::*)(bool)>(&DialPlateShow64bit::on_btn_Init));

	//以lambda表达式作为槽函数
	connect(ui.btn_Exit, &QPushButton::clicked, [this](){this->close(); });
}

void DialPlateShow64bit::sliderValueChanged(int value)
{
	ui.dialPlate->setValue(value);
	ui.dialPlate->update();
}

DialPlateShow64bit::~DialPlateShow64bit()
{

}

void DialPlateShow64bit::bigDiviValueChanged(int bigDivi)
{
	ui.dialPlate->setBigDivided(bigDivi);
	ui.dialPlate->update();
}

void DialPlateShow64bit::bigDiviValueChanged(QString bigDivi)
{
	ui.labl_bigDivi->setText(bigDivi);
	ui.dialPlate->update();
}

void DialPlateShow64bit::smallDiviValueChanged(int smallDivi)
{
	ui.dialPlate->setSmallDivided(smallDivi);
	ui.dialPlate->update();
}

void DialPlateShow64bit::smallDiviValueChanged(QString smallDivi)
{
	ui.labl_smallDivi->setText(smallDivi);
}

void DialPlateShow64bit::scaleValueChanged(int scale)
{
	ui.dialPlate->setScale(scale);
	ui.hSlider_value->setMaximum(10 * ui.spbx_scale->value());
	ui.dialPlate->update();
}

void DialPlateShow64bit::scaleValueChanged(QString scale)
{
	ui.labl_scale->setText("倍率 X" + scale);
}

void DialPlateShow64bit::on_btn_Init(void)
{
	ui.spBx_bigDivi->setValue(10);
	ui.spbx_smallDivi->setValue(10);
	ui.spbx_scale->setValue(1);
}

void DialPlateShow64bit::on_btn_Init(bool isInit)
{
	ui.labl_scale->setText("初始倍率");
}

程序中包含了QT5版本中信号和槽函数新的connect方式,以及采用这种方式出现信号或者槽函数重载的情况的解决办法,最后还利用了lambda作为槽函数。关于lambda可以参考C++ lambda表达式入门

三、生成可执行程序

将配置管理器改成Release,生成Release版本的可以执行文件。
在这里插入图片描述

在这里插入图片描述
打开安装QT时安装的MSVC1025,根据自己的程序选择32bit/64bit,
在这里插入图片描述
红色箭头指的是windeployqt,需要我们手动输入,蓝色箭头指的需要执行的程序的exe文件,可以复制进来或者直接点住鼠标拖进来,注意这两个箭头内容直接有一个空格。

在这里插入图片描述
按Enter后会自动执行。
在这里插入图片描述
最后Release文件夹内的文件就变这样了,点击exe文件程序就可以直接打开使用啦!
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值