QT + halcon混合编程 一个读取图像的项目4

15 篇文章 6 订阅

在前面的项目上进行修改,修改了两个界面之间的信息传递(自定义信号senddata(),emit发送信号,自定义接受信号的槽函数gendata())

需要实现的主要功能:1.读取指定的图像 2. 读取连接的相机图像  3.快捷菜单图像的保存 4.相机的帧捕获器参数设置

项目环境: win10        HALCON18.11        Qt 514

直接上运行结果图(参数设置实现了前面的8个,后面三个(帧率,外部触发,断开)是没有响应的)。

 

 

  项目文件(.pro)

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    subwindow.cpp \
    widget.cpp

HEADERS += \
    subwindow.h \
    widget.h

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


#halcon配置代码,已经将include、lib拷贝到项目之下
win32: LIBS += -L$$PWD/lib/x64-win64/ -lhalcon
win32: LIBS += -L$$PWD/lib/x64-win64/ -lhalconc
win32: LIBS += -L$$PWD/lib/x64-win64/ -lhalconcpp
win32: LIBS += -L$$PWD/lib/x64-win64/ -lhalconcppxl
win32: LIBS += -L$$PWD/lib/x64-win64/ -lhalconcxl
win32: LIBS += -L$$PWD/lib/x64-win64/ -lhalconxl
win32: LIBS += -L$$PWD/lib/x64-win64/ -lhdevenginecpp
win32: LIBS += -L$$PWD/lib/x64-win64/ -lhdevenginecppxl
win32: LIBS += -L$$PWD/lib/x64-win64/ -llibiomp5md

INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include

 头文件Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QTabWidget>
#include <QGroupBox>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QDebug>
#include <QMouseEvent>
#include <QPainter>
#include <QLineEdit>
#include <QTextEdit>
#include<QFileDialog>
#include<QCoreApplication>
#include <QTimer>
#include <QPalette>
#include <QWidget>
#include <QMessageBox>
#include <QTabWidget>
#include <QGroupBox>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QDebug>
#include <QMouseEvent>
#include <QPainter>
#include <QLineEdit>
#include <QTextEdit>
#include <QComboBox>
#include <QMenu>
#include <QMenuBar>
#include <QMessageBox>
#include <QMouseEvent>
#include "halconcpp/HalconCpp.h"
#include "Halcon.h"

//#include "SubWindow.h"
#include "subwindow.h"
using namespace HalconCpp;


#pragma execution_character_set("utf-8") //支持中文

class Widget : public QWidget
{
    Q_OBJECT

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



private:
    QLabel *label;
    QPushButton *btn1;
    QPushButton *btn2;
    QPushButton *btn3;
    QPushButton *btn4;
    QPushButton *btn5;

    HTuple  hv_AcqHandle,hv_WindowHandle;
    HObject  ho_Image;
    HTuple  hv_Width, hv_Height;
    Hlong windID;
    QTimer *timer;
    Hlong  MainWndID;


    QTabWidget *tabwidget;
    QWidget *tab1;
    QWidget *tab2;
    QTextEdit *qle;
    QComboBox *cbox;

    HTuple  hv_Information, hv_ValueList;


    QMenu *m_pMenu;
    QAction *m_pa1,*m_pa2;

    Subwindow *subwin;

    void createWidget();
    void createMyMenu();


    //int testvalue = 0;
signals:
    //void mySignal();
    void mySignal();

private slots:
    void on_clicked1();
    void on_clicked2();
    void on_clicked3();
    void on_clicked4();


    void on_clicked5();

    void camera();


    void onMenu1Event();
    void onMenu2Event();

    //void mySlot();
    //void getData(QString str,int value);
    void getData(int,int,int,int,int,int,int,QString,double,QString,QString);

protected:
    void mousePressEvent(QMouseEvent * event);//鼠标单击事件

};
#endif // WIDGET_H

 C++文件Widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //创建界面
    createWidget();

    //创建快捷菜单
    createMyMenu();

    subwin = new Subwindow();

    //连接子页面信号和主页面的槽
    connect(subwin,SIGNAL(sendData(int,int,int,int,int,int,int,QString,double,QString,QString)),
            this,SLOT(getData(int,int,int,int,int,int,int,QString,double,QString,QString)));



    timer = new QTimer(this);

    connect(timer,SIGNAL(timeout()),this,SLOT(camera()));


    connect(this->btn1,SIGNAL(clicked()),this,SLOT(on_clicked1()));
    connect(this->btn2,SIGNAL(clicked()),this,SLOT(on_clicked2()));
    connect(this->btn3,SIGNAL(clicked()),this,SLOT(on_clicked3()));
    connect(this->btn4,SIGNAL(clicked()),this,SLOT(on_clicked4()));


    connect(m_pa1,SIGNAL(triggered()),this,SLOT(onMenu1Event()));
    connect(m_pa2,SIGNAL(triggered()),this,SLOT(onMenu2Event()));


    connect(this->btn5,SIGNAL(clicked()),this,SLOT(on_clicked5()));


}

Widget::~Widget()
{
}

void Widget::createWidget(){

    this->setFixedSize(1000,575);
    this->setWindowTitle("图像读取");

    label = new QLabel(this);
    label->setGeometry(350,25,600,500);

    MainWndID = (Hlong)this->label->winId();
    OpenWindow(0, 0, label->width(), label->height(), MainWndID,
               "visible", "", &hv_WindowHandle);
    HDevWindowStack::Push(hv_WindowHandle);

    qle = new QTextEdit(this);
    //qle->setGeometry(25,325,300,200);
    qle->setGeometry(25,330,300,195);
    qle->setReadOnly(true);

    tabwidget = new QTabWidget(this);
    tab1 = new QWidget;
    tab2 = new QWidget;
    //tab3 = new QWidget;
    tabwidget->addTab(tab1, "读取指定图像");
    tabwidget->addTab(tab2, "读取相机图像");
    tabwidget->setGeometry(25, 25, 300, 300);
    tabwidget->setTabShape(QTabWidget::Triangular);

    QVBoxLayout *vbox1 = new QVBoxLayout;
    //vbox1->setAlignment(Qt::AlignTop|Qt::AlignHCenter);
    vbox1->setAlignment(Qt::AlignCenter);
    tab1->setLayout(vbox1);

    btn1 = new QPushButton();
    btn1->setFixedSize(100,50);
    btn1->setText("选择图片");
    vbox1->addWidget(btn1);



    QVBoxLayout *vbox2 = new QVBoxLayout;
    vbox2->setAlignment(Qt::AlignHCenter);
    tab2->setLayout(vbox2);

    QVBoxLayout *vbox3 = new QVBoxLayout;
    vbox3->setAlignment(Qt::AlignHCenter);
    vbox3->setSpacing(10);

    QWidget *qw0 = new QWidget;
    qw0->setLayout(vbox3);
    vbox2->addWidget(qw0);

    cbox = new QComboBox();
    cbox->setFixedSize(200,35);
    vbox3->addWidget(cbox);

    QGridLayout *gbox = new QGridLayout;
    gbox->setAlignment(Qt::AlignTop);
    gbox->setSpacing(35);

    QWidget *qw1 = new QWidget;
    qw1->setLayout(gbox);
    vbox2->addWidget(qw1);



    btn2 = new QPushButton();
    btn2->setFixedSize(100,50);
    btn2->setText("打开相机");
    btn2->setEnabled(false);
    gbox->addWidget(btn2,1,0,1,1);
    //vbox2->addWidget(btn2);

    btn3 = new QPushButton();
    btn3->setFixedSize(100,50);
    btn3->setText("关闭相机");
    btn3->setEnabled(false);
    gbox->addWidget(btn3,1,1,1,1);
    //vbox2->addWidget(btn3);

    btn4 = new QPushButton();
    btn4->setFixedSize(100,50);
    btn4->setText("检测相机");
    gbox->addWidget(btn4,0,0,1,1);
    //gridlayout->addWidget(xmval1,0,1,1,1);
    //vbox2->addWidget(btn4);

    btn5 = new QPushButton();
    btn5->setFixedSize(100,50);
    btn5->setText("配置参数");
    gbox->addWidget(btn5,0,1,1,1);


}


void Widget::createMyMenu(){
    //创造菜单对象
    m_pMenu = new QMenu(this);
    m_pa1 = m_pMenu->addAction("另存为");
    m_pa2 = m_pMenu->addAction("退出");
}


void Widget::mousePressEvent(QMouseEvent *event)
{
    //在鼠标右击的地方显示菜单
    /*
    if(e->button()==Qt::RightButton)
    {
        m_pMenu->exec(cursor().pos());
    }*/
    if(label->geometry().contains(this->mapFromGlobal(QCursor::pos())) //鼠标是否在界面上
            &&event->button()==Qt::RightButton)
    {
        qDebug() << "右键:快捷菜单" ;
        m_pMenu->exec(cursor().pos());
    }
}

void Widget::onMenu1Event(){
    //QMessageBox::information(this,"注意","保存图片");

    try
    {
        qDebug() << "另图片为";
        QString filename = QFileDialog::getSaveFileName(this,tr("Save Image"),"",tr("Images (*.png *.bmp *.jpg)")); //选择路径
        qDebug() << "图片路径:"<<filename;
        //分割路径,获得路径文件名,文件格式
        if(!(filename.isEmpty())) //文件路径不为空
        {
            QStringList strList = filename.split(".");
            //QString type = strList[1];
            //halcon的字符是Htuple格式需要转化,使用前需要转换下
            QByteArray Qa1 = strList[0].toLatin1();
            const char *str1 = Qa1.data();
            HTuple  ImageName(str1);

            QByteArray Qa2 = strList[1].toLatin1();
            const char *str2 = Qa2.data();
            HTuple  ImageType(str2);

            //WriteImage(ho_Image, "jpg", 0, "C:/Users/admin/Desktop/1.jpg");
            WriteImage(ho_Image, ImageType, 0, ImageName);

        }

    }
    catch (HException &HDevExpDefaultException)
    {
        HTuple  hv_Exception;
        HDevExpDefaultException.ToHTuple(&hv_Exception);
        qDebug() << "保存图片失败";
    }
}

void Widget::onMenu2Event(){
    //close();
    //this->close();
    qDebug() << "退出";
    close();
}


void Widget::on_clicked1(){
    qDebug() << "按下了1号按钮,读取图片";
    try
    {
        QString file_name;
        file_name = QFileDialog::getOpenFileName(this,tr("open  file"),".",tr("Video Files(*.bmp *.jpg *.pbm *.pgm *.png *.ppm *.xbm *.xpm)"));

        qle->setText("读取图像:"+file_name);

        QByteArray ba = file_name.toLatin1();
        const char *str = ba.data();
        HTuple  ImageName(str);

        ReadImage(&ho_Image, ImageName);
        GetImageSize(ho_Image, &hv_Width, &hv_Height);
        SetPart(hv_WindowHandle, 0, 0, hv_Height, hv_Width);
        DispObj(ho_Image, HDevWindowStack::GetActive());
    }
    catch (HException &HDevExpDefaultException)
    {
        HTuple  hv_Exception;
        HDevExpDefaultException.ToHTuple(&hv_Exception);
    }
}

void Widget::on_clicked2(){
    qDebug() << "按下了2号按钮,打开相机";
    qle->setText("打开相机");
    //timer->start(20);//定时器开始工作,参数影响帧率
    timer->start(20);//定时器开始工作,参数影响帧率
    //Image Acquisition 01: Code generated by Image Acquisition 01
    /*
    OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false",
                     "default", "[0] USB2.0 PC CAMERA", 0, -1, &hv_AcqHandle);*/

    try
    {
        int curIndex = cbox->currentIndex();

        OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false",
                         "default", hv_ValueList[curIndex], 0, -1, &hv_AcqHandle);

        //SetFramegrabberParam(hv_AcqHandle, "brightness", 0);
        //SetFramegrabberParam(hv_AcqHandle, "contrast", 28);

        GrabImageStart(hv_AcqHandle, -1);

        //    在openwindow前先抓取一帧图片
        GrabImage(&ho_Image,hv_AcqHandle);
        btn3->setEnabled(true);
        btn2->setEnabled(false);
    }
    catch (HException &HDevExpDefaultException)
    {
        HTuple  hv_Exception;
        HDevExpDefaultException.ToHTuple(&hv_Exception);
    }


}

void Widget::on_clicked3(){
    qDebug() << "按下了3号按钮,关闭相机";
    qle->setText("关闭相机");
    timer->stop();
    CloseFramegrabber(hv_AcqHandle);
    btn3->setEnabled(false);
    btn2->setEnabled(true);
}

void Widget::camera()
{
    GrabImage(&ho_Image, hv_AcqHandle);
    GetImageSize(ho_Image, &hv_Width, &hv_Height);
    SetPart(hv_WindowHandle, 0, 0, hv_Height, hv_Width);
    if(HDevWindowStack::IsOpen())
    {
        DispObj(ho_Image,HDevWindowStack::GetActive());
    }
    //WaitSeconds(0.1);
}

void Widget::on_clicked4(){
    qDebug() << "按下了4号按钮,检测相机";

    try
    {
        InfoFramegrabber("DirectShow", "device", &hv_Information, &hv_ValueList);
        HString str1 = hv_Information.S();

        int num = hv_ValueList.Length();
        QString result = "检测到"+QString::number(num)+"个相机"+"\n"+str1.Text()+"\n";
        // HString str2 = "";
        cbox->clear();
        for (int i = 0; i < num; ++i) {
            HString str2 = hv_ValueList[i].S();
            cbox->addItem(QString(str2));
            result = result + str2.Text()+"\n";
        }

        qDebug()<<result;
        qle->setText(result);
        btn2->setEnabled(true);
    }
    catch (HException &HDevExpDefaultException)
    {
        HTuple  hv_Exception;
        HDevExpDefaultException.ToHTuple(&hv_Exception);
        qle->setText("没检测到相机");
    }
}


void Widget::on_clicked5(){
    qDebug() << "按下了5号按钮,配置参数";
    //testvalue = 100;

    //Subwindow *subwin = new Subwindow();
    subwin->show();
}



void Widget::getData(int value1,int value2,int value3,int value4,int value5,int value6,
                     int value7,QString value8,double value9,QString value10,QString value11)
{

    qDebug() <<"设置帧抓取器参数";
    //1

    SetFramegrabberParam(hv_AcqHandle, "grab_timeout", HTuple(value1));

    //2
    //SetFramegrabberParam(hv_AcqHandle, "brightness", 161);
    SetFramegrabberParam(hv_AcqHandle, "brightness", HTuple(value2));

    //3
    //SetFramegrabberParam(hv_AcqHandle, "contrast", 255);
    SetFramegrabberParam(hv_AcqHandle, "contrast", HTuple(value3));

    //4
    //SetFramegrabberParam(hv_AcqHandle, "hue", 53);
    SetFramegrabberParam(hv_AcqHandle, "hue", HTuple(value4));

    //5
    //SetFramegrabberParam(hv_AcqHandle, "saturation", 255);

    SetFramegrabberParam(hv_AcqHandle, "saturation", HTuple(value5));

    //6
    //SetFramegrabberParam(hv_AcqHandle, "sharpness", 7);
    SetFramegrabberParam(hv_AcqHandle, "sharpness", HTuple(value6));

    //7
    //SetFramegrabberParam(hv_AcqHandle, "gamma", 6);
    SetFramegrabberParam(hv_AcqHandle, "gamma", HTuple(value7));

    //8
    //HTuple(
    //SetFramegrabberParam(hv_AcqHandle, "backlight_compensation", "on");
    QByteArray Qa8 = value8.toLatin1();
    const char *str8 = Qa8.data();
    HTuple  fg8(str8);
    SetFramegrabberParam(hv_AcqHandle, "backlight_compensation", fg8);
    //SetFramegrabberParam(hv_AcqHandle, "backlight_compensation", "off");

    //9
    //SetFramegrabberParam(hv_AcqHandle, "frame_rate", 30.0);

    //10
    //SetFramegrabberParam(hv_AcqHandle, "external_trigger", "false");

    //11
    SetFramegrabberParam(hv_AcqHandle, "disconnect_graph", "false");
}

 subwindow.h

#ifndef SUBWINDOW_H
#define SUBWINDOW_H

#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QTabWidget>
#include <QGroupBox>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QDebug>
#include <QMouseEvent>
#include <QPainter>
#include <QLineEdit>
#include <QTextEdit>
#include<QFileDialog>
#include<QCoreApplication>
#include <QTimer>
#include <QPalette>
#include <QWidget>
#include <QMessageBox>
#include <QTabWidget>
#include <QGroupBox>
#include <QRadioButton>
#include <QVBoxLayout>
#include <QCheckBox>
#include <QDebug>
#include <QMouseEvent>
#include <QPainter>
#include <QLineEdit>
#include <QTextEdit>
#include <QComboBox>
#include <QMenu>
#include <QMenuBar>
#include <QMessageBox>
#include <QMouseEvent>
#include "halconcpp/HalconCpp.h"
#include "Halcon.h"

#include <QSpinBox>
#include <QSlider>
#include <QButtonGroup>
//#include "widget.h"


using namespace HalconCpp;

#pragma execution_character_set("utf-8") //支持中文

class Subwindow : public QWidget
{
    Q_OBJECT

public:
    explicit Subwindow(QWidget *parent = nullptr);
    ~Subwindow();

    int fg_value1 = 5000;
    int fg_value2 = 128;
    int fg_value3 = 140;
    int fg_value4 = 0;
    int fg_value5 = 80;
    int fg_value6 = 1;
    int fg_value7 = 4;
    QString fg_value8 = "on";
    double fg_value9 = 30;
    QString fg_value10 = "false";
    QString fg_value11 = "false";


private:
    //QLineEdit *qle1;
    //QPushButton *Btn;
    //QLineEdit *qle1;
//signals:
//    void sendData(QString);//发送数据的信号
    //QLineEdit *input1;


    void createWinow();
    QButtonGroup *groupButton8;
    QComboBox *input9;
signals:
    //void sendData(QString);//发送数据的信号
    //void sendData(QString,int);//发送数据的信号
    void sendData(int,int,int,int,int,int,int,QString,double,QString,QString);//发送数据的信号


private slots:
    void changefgv1(int value);
    void changefgv2(int value);
    void changefgv3(int value);
    void changefgv4(int value);
    void changefgv5(int value);
    void changefgv6(int value);
    void changefgv7(int value);

    void changefgv8();

    //void changefgv9(double value);
    void changefgv9(double value);

    void changefgv10(QString value);
    void changefgv11(QString value);


};


#endif // SUBWINDOW_H

subwindow.cpp

//#include "SubWindow.h"
#include "subwindow.h"

Subwindow::Subwindow(QWidget *parent) :
    QWidget(parent)
{

    createWinow();


}

Subwindow::~Subwindow()
{

}

void Subwindow::createWinow()
{


    this->setWindowTitle("配置参数");
    this->setFixedSize(800,360);

    /
    QLabel *ql1 = new QLabel(this);
    ql1->setText("grab timeout:");
    ql1->setWordWrap(true);
    ql1->adjustSize();
    ql1->setAlignment(Qt::AlignRight|Qt::AlignTop);
    ql1->setGeometry(25,40,100,50);

    QSpinBox *input1 = new QSpinBox(this);
    input1->setMaximum(9999);
    input1->setMinimum(0);
    input1->setSingleStep(10);
    input1->setValue(5000);
    input1->setGeometry(125,40,100,30);

    connect(input1,SIGNAL(valueChanged(int)),this,SLOT(changefgv1(int)));




    ///



    QLabel *ql2 = new QLabel(this);
    ql2->setText("brightness:");
    ql2->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
    ql2->setGeometry(425,40,100,30);

    QSpinBox *input2_0 = new QSpinBox(this);
    input2_0->setMaximum(255);
    input2_0->setMinimum(0);
    input2_0->setSingleStep(1);
    input2_0->setValue(128);
    input2_0->setGeometry(525,40,100,30);


    QSlider *input2_1 = new QSlider(this);
    input2_1->setMaximum(255);
    input2_1->setMinimum(0);
    input2_1->setSingleStep(1);
    input2_1->setValue(128);
    input2_1->setOrientation(Qt::Horizontal);
    input2_1->setTickPosition(QSlider::TicksBothSides);
    input2_1->setGeometry(625,40,100,30);


    connect(input2_0, SIGNAL(valueChanged(int)), input2_1, SLOT(setValue(int)));
    connect(input2_1, SIGNAL(valueChanged(int)), input2_0, SLOT(setValue(int)));

    connect(input2_0,SIGNAL(valueChanged(int)),this,SLOT(changefgv2(int)));
    //connect(input2_0,SIGNAL(valueChanged(int)),this,SLOT(changefgv(int)));

    ///
    QLabel *ql3 = new QLabel(this);
    ql3->setText("contrast:");
    ql3->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
    ql3->setGeometry(25,90,100,30);

    QSpinBox *input3_0 = new QSpinBox(this);
    input3_0->setMaximum(255);
    input3_0->setMinimum(0);
    input3_0->setSingleStep(1);
    input3_0->setValue(140);
    input3_0->setGeometry(125,90,100,30);


    QSlider *input3_1 = new QSlider(this);
    input3_1->setMaximum(255);
    input3_1->setMinimum(0);
    input3_1->setSingleStep(1);
    input3_1->setValue(140);
    input3_1->setOrientation(Qt::Horizontal);
    input3_1->setTickPosition(QSlider::TicksBothSides);
    input3_1->setGeometry(225,90,100,30);


    connect(input3_0, SIGNAL(valueChanged(int)), input3_1, SLOT(setValue(int)));
    connect(input3_1, SIGNAL(valueChanged(int)), input3_0, SLOT(setValue(int)));

    connect(input3_0,SIGNAL(valueChanged(int)),this,SLOT(changefgv3(int)));

    //
    QLabel *ql4 = new QLabel(this);
    ql4->setText("hue:");
    ql4->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
    ql4->setGeometry(425,90,100,30);

    QSpinBox *input4_0 = new QSpinBox(this);
    input4_0->setMaximum(127);
    input4_0->setMinimum(-127);
    input4_0->setSingleStep(1);
    input4_0->setValue(0);
    input4_0->setGeometry(525,90,100,30);


    QSlider *input4_1 = new QSlider(this);
    input4_1->setMaximum(127);
    input4_1->setMinimum(-127);
    input4_1->setSingleStep(1);
    input4_1->setValue(0);
    input4_1->setOrientation(Qt::Horizontal);
    input4_1->setTickPosition(QSlider::TicksBothSides);
    input4_1->setGeometry(625,90,100,30);


    connect(input4_0, SIGNAL(valueChanged(int)), input4_1, SLOT(setValue(int)));
    connect(input4_1, SIGNAL(valueChanged(int)), input4_0, SLOT(setValue(int)));

    connect(input4_0,SIGNAL(valueChanged(int)),this,SLOT(changefgv4(int)));

    ///
    QLabel *ql5 = new QLabel(this);
    ql5->setText("saturation:");
    ql5->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
    ql5->setGeometry(25,140,100,30);

    QSpinBox *input5_0 = new QSpinBox(this);
    input5_0->setMaximum(255);
    input5_0->setMinimum(0);
    input5_0->setSingleStep(1);
    input5_0->setValue(80);
    input5_0->setGeometry(125,140,100,30);


    QSlider *input5_1 = new QSlider(this);
    input5_1->setMaximum(255);
    input5_1->setMinimum(0);
    input5_1->setSingleStep(1);
    input5_1->setValue(80);
    input5_1->setOrientation(Qt::Horizontal);
    input5_1->setTickPosition(QSlider::TicksBothSides);
    input5_1->setGeometry(225,140,100,30);


    connect(input5_0, SIGNAL(valueChanged(int)), input5_1, SLOT(setValue(int)));
    connect(input5_1, SIGNAL(valueChanged(int)), input5_0, SLOT(setValue(int)));

    connect(input5_0,SIGNAL(valueChanged(int)),this,SLOT(changefgv5(int)));
    //
    QLabel *ql6 = new QLabel(this);
    ql6->setText("sharpness:");
    ql6->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
    ql6->setGeometry(425,140,100,30);

    QSpinBox *input6_0 = new QSpinBox(this);
    input6_0->setMaximum(15);
    input6_0->setMinimum(0);
    input6_0->setSingleStep(1);
    input6_0->setValue(1);
    input6_0->setGeometry(525,140,100,30);


    QSlider *input6_1 = new QSlider(this);
    input6_1->setMaximum(15);
    input6_1->setMinimum(0);
    input6_1->setSingleStep(1);
    input6_1->setValue(1);
    input6_1->setOrientation(Qt::Horizontal);
    input6_1->setTickPosition(QSlider::TicksBothSides);
    input6_1->setGeometry(625,140,100,30);


    connect(input6_0, SIGNAL(valueChanged(int)), input6_1, SLOT(setValue(int)));
    connect(input6_1, SIGNAL(valueChanged(int)), input6_0, SLOT(setValue(int)));

    connect(input6_0,SIGNAL(valueChanged(int)),this,SLOT(changefgv6(int)));
    /
    QLabel *ql7 = new QLabel(this);
    ql7->setText("gamma:");
    ql7->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
    ql7->setGeometry(25,190,100,30);

    QSpinBox *input7_0 = new QSpinBox(this);
    input7_0->setMaximum(8);
    input7_0->setMinimum(1);
    input7_0->setSingleStep(1);
    input7_0->setValue(4);
    input7_0->setGeometry(125,190,100,30);


    QSlider *input7_1 = new QSlider(this);
    input7_1->setMaximum(8);
    input7_1->setMinimum(1);
    input7_1->setSingleStep(1);
    input7_1->setValue(4);
    input7_1->setOrientation(Qt::Horizontal);
    input7_1->setTickPosition(QSlider::TicksBothSides);
    input7_1->setGeometry(225,190,100,30);


    connect(input7_0, SIGNAL(valueChanged(int)), input7_1, SLOT(setValue(int)));
    connect(input7_1, SIGNAL(valueChanged(int)), input7_0, SLOT(setValue(int)));

    connect(input7_0,SIGNAL(valueChanged(int)),this,SLOT(changefgv7(int)));
    /
    QLabel *ql8 = new QLabel(this);
    ql8->setText("backlight compensation:");
    ql8->setWordWrap(true);
    ql8->adjustSize();
    ql8->setAlignment(Qt::AlignRight|Qt::AlignTop);
    ql8->setGeometry(425,190,100,50);



    QRadioButton *radio1 = new QRadioButton(tr("on"),this);
    QRadioButton *radio2 = new QRadioButton(tr("off"),this);
    radio1->setGeometry(530,190,100,30);
    radio2->setGeometry(625,190,100,30);

    //QButtonGroup *groupButton8 = new QButtonGroup();
    groupButton8 = new QButtonGroup();
    groupButton8->addButton(radio1,0);
    groupButton8->addButton(radio2,1);
    radio1->setChecked(true);

    connect(radio1,SIGNAL(clicked(bool)),this,SLOT(changefgv8()));
    connect(radio2,SIGNAL(clicked(bool)),this,SLOT(changefgv8()));

    //connect(radio1,SIGNAL(clicked(bool)),this,SLOT(slots_radioButton()));
    //connect(radio2,SIGNAL(clicked(bool)),this,SLOT(slots_radioButton()));



    /
    QLabel *ql9 = new QLabel(this);
    ql9->setText("frame_rate:");
    ql9->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
    ql9->setGeometry(25,240,100,30);

    //QComboBox *input9 = new QComboBox(this);
    input9 = new QComboBox(this);
    QStringList strList9;
    strList9<<"60"<<"30"<<"15"<<"7.5"<<"3.75"
           <<"1.875";
    input9->addItems(strList9);
    //input9->setCurrentIndex(-1);
    input9->setCurrentIndex(1);
    input9->setGeometry(125,240,100,30);

    connect(input9,SIGNAL(currentIndexChanged(int)),this,SLOT(changefgv9(double)));


    /
    QLabel *ql10 = new QLabel(this);
    ql10->setText("external trigger:");
    ql10->setWordWrap(true);
    ql10->adjustSize();
    ql10->setAlignment(Qt::AlignRight|Qt::AlignTop);
    ql10->setGeometry(425,240,100,50);



    QRadioButton *radio3 = new QRadioButton(tr("true"),this);
    QRadioButton *radio4 = new QRadioButton(tr("false"),this);
    radio3->setGeometry(530,240,100,30);
    radio4->setGeometry(625,240,100,30);

    QButtonGroup *groupButton10 = new QButtonGroup();
    groupButton10->addButton(radio3,0);
    groupButton10->addButton(radio4,1);
    radio4->setChecked(true);

    
    QLabel *ql11 = new QLabel(this);
    ql11->setText("disconnect graph:");
    ql11->setWordWrap(true);
    ql11->adjustSize();
    ql11->setAlignment(Qt::AlignRight|Qt::AlignTop);
    ql11->setGeometry(25,290,100,50);



    QRadioButton *radio5 = new QRadioButton(tr("true"),this);
    QRadioButton *radio6 = new QRadioButton(tr("false"),this);
    radio5->setGeometry(130,290,100,30);
    radio6->setGeometry(225,290,100,30);

    QButtonGroup *groupButton11 = new QButtonGroup();
    groupButton11->addButton(radio5,0);
    groupButton11->addButton(radio6,1);
    radio6->setChecked(true);

}

void Subwindow::changefgv1(int value)
{
    fg_value1 = value;
    qDebug()<<"fg_value1:"<<fg_value1;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}


void Subwindow::changefgv2(int value)
{
    fg_value2 = value;
    qDebug()<<"fg_value2:"<<fg_value2;
    //emit sendData("hal",fg_value2);
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

void Subwindow::changefgv3(int value)
{
    fg_value3 = value;
    qDebug()<<"fg_value3:"<<fg_value3;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

void Subwindow::changefgv4(int value)
{
    fg_value4 = value;
    qDebug()<<"fg_value4:"<<fg_value4;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

void Subwindow::changefgv5(int value)
{
    fg_value5 = value;
    qDebug()<<"fg_value5:"<<fg_value5;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

void Subwindow::changefgv6(int value)
{
    fg_value6 = value;
    qDebug()<<"fg_value6:"<<fg_value6;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

void Subwindow::changefgv7(int value)
{
    fg_value7 = value;
    qDebug()<<"fg_value7:"<<fg_value7;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

void Subwindow::changefgv8()
{
    //fg_value8 = value;

    switch (groupButton8->checkedId())
    {
    case 0:
        qDebug()<<"on";
        fg_value8 = "on";
        break;
    case 1:
        qDebug()<<"off";
        fg_value8 = "off";
        break;
    }


    qDebug()<<"fg_value8:"<<fg_value8;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

void Subwindow::changefgv9(double value)
{
    //未实现功能
    //本应用使用Qtimer触发图像抓取的循环,帧率又Qtimer.start(int)来设置,
    //多次设置将帧率不稳定,导致实际帧率不可猜测
    //fg_value9 = value;
    //fg_value9 = this->input9->currentData().toDouble();
    int curIndex = value;
    switch(curIndex)
    {
    case 0 :
        fg_value9 = 60;
        break;
    case 1 :
        fg_value9 = 30;
        break;
    case 2 :
        fg_value9 = 15;
        break;
    case 3 :
        fg_value9 = 7.5;
        break;
    case 4 :
        fg_value9 = 3.75;
        break;
    default :
        fg_value9 = 1.875;
        break;
    }

    qDebug()<<"index:"<<value;
    qDebug()<<"fg_value9:"<<fg_value9;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

void Subwindow::changefgv10(QString value)
{
    //未实现功能
    //是否外部触发,只要设置为true就会报错,而在halcon中也是无法设置
    fg_value10 = value;
    qDebug()<<"fg_value10:"<<fg_value10;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

void Subwindow::changefgv11(QString value)
{
    //未实现功能
    //是否停止抓取,最好还是去掉这个功能。
    fg_value11 = value;
    qDebug()<<"fg_value11:"<<fg_value11;
    emit sendData(fg_value1,fg_value2,fg_value3,fg_value4,fg_value5,fg_value6,
                  fg_value7,fg_value8,fg_value9,fg_value10,fg_value11);
}

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值