基于Vs+Qt的工业相机界面开发demo(HDU短学期)

1、开发环境

vs2017

Qt5.12.5

opencv4.0

海康相机sdk

链接:https://pan.baidu.com/s/1QsOskg9hAjOK0pC1hDqaqA 提取码:zfkk

自行安装

OpenCV4+VS2015的配置

2、预备知识

本节我们将学习Qt的基本操作,本项目需要使用的主要的知识:信号与槽机制、多线程,下面通过两个简单的例子熟悉QtCreator开发环境。

QT教程-快速入门

QT信号槽概念原理讲解

介绍:Qt是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序。

2.1 第一个程序 :hello World

单击 Qt Creator 的菜单项文件->新建文件或项目,出现如图 1 所示的对话框。在这个对话框里选择需要创建的项目或文件的模板。

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
        图1  新建文件或项目对话框

                                                                 

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
 图 2 新建项目向导第 1 步:项目名称和项目存储位置设置标题

                                       

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
图3

                                                                             

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
     图4

                                                                             

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
图5 选择编译工具

                                                                           

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
标图6 完成创建项目题

                                                                                

项目管理与文件编辑界面

点击Start debugging of startup project运行一下,会弹出一个空白的窗口。

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
标图 7 项目管理与文件编辑界面题

                                                                               

                                          

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
 图8 debug运行的空白窗口

                                                                                 


接下来我们将在该空白窗口中添加各种所需要的控件。

双击文件目录树中的文件 demowidget1.ui,出现如图10所示的窗体设计界面.

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
  图9

                                                                                           

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
 图10

                                                                                               

简单介绍的我们需要使用的界面控件。

Push Button:普通按钮

Label:可以显示文字、图片、动图。

Line Edit : 单行文本编辑框,可以输入单行文本;

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
图11
基于Vs+Qt的工业相机界面开发demo(HDU短学期)
图12
基于Vs+Qt的工业相机界面开发demo(HDU短学期)
图13

再次Debug,Qt会自动帮我们生成界面Ui相关的C++代码 

 

基于Vs+Qt的工业相机界面开发demo(HDU短学期)
图14
基于Vs+Qt的工业相机界面开发demo(HDU短学期)
图15

下面要实现两个功能:

1、点击bnt_click后在label_display中显示“ Hello World!!”

2、在lineEdit_input输入字符串就在label_display中显示该字符串。

信号与槽机制

信号与槽(Signal & Slot)是 Qt 编程的基础,也是 Qt 的一大创新。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。

信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号。

GUI 程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。

槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。

 

信号与槽关联是用 QObject::connect() 函数实现的,其基本格式是:

QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

下面实现第一个功能 

首先声明槽函数

基于Vs+Qt的工业相机界面开发demo(HDU短学期)

#ifndef DEMOWIDGET1_H
#define DEMOWIDGET1_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class DemoWidget1; }
QT_END_NAMESPACE

class DemoWidget1 : public QWidget
{
Q_OBJECT

public:
DemoWidget1(QWidget *parent = nullptr);
~DemoWidget1();

private:
Ui::DemoWidget1 *ui;

// 声明我们的槽函数
public slots:
void on_bnt_click(); // PushButton按键响应的槽函数
void on_lineEdit_input(); // lineEdit输入响应的槽函数
};
#endif // DEMOWIDGET1_H

然后定义槽函数

基于Vs+Qt的工业相机界面开发demo(HDU短学期)

 基于Vs+Qt的工业相机界面开发demo(HDU短学期)

多线程(重点!敲黑板)

基于Vs+Qt的工业相机界面开发demo(HDU短学期)

基于Vs+Qt的工业相机界面开发demo(HDU短学期)

 mythread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QObject>
#include <QWidget>
#include <QThread>

class Mythread : public QThread
{
Q_OBJECT
public:
explicit Mythread(QObject *parent = nullptr);
public:
void run();

public:
int thread_count;

signals:
void mySinal();//信号

void mySinal_param(int thread_count);

public slots:

};

#endif // MYTHREAD_H

mythread.cpp 

#include "mythread.h"

Mythread::Mythread(QObject *parent) : QThread(parent)
{

}

void Mythread::run()
{
int mythread_count=0;

while (!isInterruptionRequested())
{
mythread_count = mythread_count + 5;

emit mySinal();//发送信号
emit mySinal_param( mythread_count );//发送含参数的信号

msleep(100);
}
}

demowidget1.h

#ifndef DEMOWIDGET1_H
#define DEMOWIDGET1_H

#include <QWidget>
#include <mythread.h>

QT_BEGIN_NAMESPACE
namespace Ui { class DemoWidget1; }
QT_END_NAMESPACE

class DemoWidget1 : public QWidget
{
Q_OBJECT

public:
DemoWidget1(QWidget *parent = nullptr);
~DemoWidget1();

private:
Ui::DemoWidget1 *ui;

// 声明我们的槽函数
public slots:
void on_bnt_click(); // PushButton按键响应的槽函数
void on_lineEdit_input(); // lineEdit输入响应的槽函数
void on_bnt_startThread();
void on_bnt_stopThread();
// 声明需要在线程中执行的耗时函数
void long_Time_Operate();
void long_Time_Operate(int count);//重载

public:
Mythread* mythread = NULL;// 线程指针
int count = 0;
};
#endif // DEMOWIDGET1_H

demowidget1.cpp

#include "demowidget1.h"
#include "ui_demowidget1.h"
#include <windows.h>

DemoWidget1::DemoWidget1(QWidget *parent)
: QWidget(parent)
, ui(new Ui::DemoWidget1)
{
ui->setupUi(this);

int count;
mythread = new Mythread; //左相机线程对象
// 绑定信号与槽函数
connect(ui->bnt_click,SIGNAL(clicked()),this,SLOT(on_bnt_click()));
connect(ui->lineEdit_input,SIGNAL(editingFinished()),this,SLOT(on_lineEdit_input()));
connect(ui->bnt_startThread,SIGNAL(clicked()),this,SLOT(on_bnt_startThread()));
connect(mythread,SIGNAL(mySinal()),this,SLOT(long_Time_Operate())); //线程的信号与对应的槽
connect(mythread,SIGNAL(mySinal_param(int)),this,SLOT(long_Time_Operate(int)));//线程的信号与对应的槽
connect(ui->bnt_stopThread,SIGNAL(clicked()),this,SLOT(on_bnt_stopThread()));
}

DemoWidget1::~DemoWidget1()
{
delete ui;
}

void DemoWidget1::on_bnt_click()
{
ui->label_diplay->setText("Hello World!!");
QFont font;
font.setPointSize(45);
font.setBold(true);
font.setWeight(75);
ui->label_diplay->setFont(font);
}

void DemoWidget1::on_lineEdit_input()
{
QString str = ui->lineEdit_input->text(); // 读取输入字符串
ui->label_diplay->setText(str);
QFont font;
font.setPointSize(45);
font.setBold(true);
font.setWeight(75);
ui->label_diplay->setFont(font);
}

//void DemoWidget1::on_bnt_startThread()
//{
// QString str ;
// QFont font;
// font.setPointSize(40);
// font.setBold(true);
// font.setWeight(75);
// ui->label_diplay2->setFont(font);

// for(int i=0; i<100 ;i++) // 循环
// {
// QString ii = QString("%4").arg(i);
// ui->label_diplay2->setText(ii);
// QThread::msleep(50);// 延时
// }
//}

void DemoWidget1::on_bnt_startThread() // 只负责开启线程
{
if (!mythread->isRunning())
{
mythread->start();
ui->label_diplay2->setText("my thread start");
}
}

void DemoWidget1::on_bnt_stopThread()
{
if(!mythread->isInterruptionRequested())
{
mythread->requestInterruption();
mythread->wait();

}
}

void DemoWidget1::long_Time_Operate()
{
QString str ;
QFont font;
font.setPointSize(72);
font.setBold(true);
font.setWeight(75);
ui->label_diplay2->setFont(font);
ui->label_diplay2->setText("long_Time_Operate");
count++;
QString ii = QString("%4").arg(count);
ui->label_diplay2->setText(ii);
}

void DemoWidget1::long_Time_Operate(int new_count)
{
QString str ;
QFont font;
font.setPointSize(72);
font.setBold(true);
font.setWeight(75);
ui->label->setFont(font);
ui->label->setText("long_Time_Operate");

QString ii = QString("%4").arg(new_count);
ui->label->setText(ii);
}

 

 

 

3、相机界面开发

参照相机SDK实现工业相机基本操作功能以及单相机标定

张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)

基于Vs+Qt的工业相机界面开发demo(HDU短学期)

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

基于Vs+Qt的工业相机界面开发demo(HDU短学期)

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » 基于Vs+Qt的工业相机界面开发demo(HDU短学期)
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏