Qt多线程的用法

来源:互联网 发布:无锡java培训机构 编辑:程序博客网 时间:2024/05/21 06:38
#include "qtwidget_ui.h"#include "ui_qtwidget_ui.h"qtWidget_ui::qtWidget_ui(QWidget *parent) :    QWidget(parent),    ui(new Ui::qtWidget_ui){    ui->setupUi(this);    this->setWindowTitle("people detecting");   // QImage *image=new QImage("1.jpg");    QGridLayout* qglMain = new QGridLayout;   //VideoCapture capture("15.avi");    mimage=imread("1.jpg");    //距离边界,左,上,右,下    qglMain->setContentsMargins(10,10,10,10);    //设置部件的间隔    qglMain->setSpacing(20);    //行比例 (行码,比例值)    qglMain->setRowStretch(0,1);    qglMain->setRowStretch(1,1);    qglMain->setRowStretch(2,1);    qglMain->setRowStretch(3,1);    qglMain->setRowStretch(4,1);    qglMain->setRowStretch(5,1);    qglMain->setRowStretch(6,1);    qglMain->setRowStretch(7,1);    //列比例  (列码,比例值)    qglMain->setColumnStretch(0,8);    qglMain->setColumnStretch(1,8);    qglMain->setColumnStretch(2,1);    qglMain->setColumnStretch(3,1);    qglMain->setColumnStretch(4,1);    qglMain->setColumnStretch(5,1);    qglMain->setColumnStretch(6,1);    qglMain->setColumnStretch(7,1);    qlabVdo = new QLabel;    //设置label的外观    qlabVdo->setFrameStyle(QFrame::Panel|QFrame::Sunken);   /* QImage qlShow=image->scaled(qlabVdo->width(),qlabVdo->height(),Qt::IgnoreAspectRatio                               ,Qt::SmoothTransformation);    qlabVdo->setPixmap(QPixmap::fromImage(qlShow));    qlabVdo->setVisible(true);    */    qglMain->addWidget(qlabVdo,0,0,2,5);    //设置线程    m_picProc=new procimage(qlabVdo);    m_thrProc=new QThread;    //lable    for(int i=0; i<LABROWNUM; i++)        for(int j=0; j<LABCOLNUM; j++){            qlabPIC[i*LABCOLNUM+j] = new QLabel;            qlabPIC[i*LABCOLNUM+j]->resize(QLABLEWIDTH,QLABLEHEIGHT);            //设置外观            qlabPIC[i*LABCOLNUM+j]->setFrameStyle(QFrame::Panel|QFrame::Sunken);          /* qlShow=image->scaled(qlabPIC[i*LABCOLNUM+j]->width(),qlabPIC[i*LABCOLNUM+j]->height(),Qt::IgnoreAspectRatio                    ,Qt::SmoothTransformation);            qlabPIC[i*LABCOLNUM+j]->setPixmap(QPixmap::fromImage(qlShow));*/            showImage(qlabPIC[i*LABCOLNUM+j],mimage);            qglMain->addWidget(qlabPIC[i*LABCOLNUM+j],i,j+5);        }    //button    pButton[0]=new QPushButton;    pButton[1]=new QPushButton;    pButton[2]=new QPushButton;    pButton[3]=new QPushButton;    pButton[0]->setText("打开视频");    pButton[1]->setText("播放视频");    pButton[2]->setText("暂停视频");    pButton[3]->setText("特征提取");    for(int i=0;i<BUTTONROW;i++)        for(int j=0;j<BUTTONCCLNUM;j++){            pButton[i*BUTTONCCLNUM+j]->resize(BUTTONWIDTH,BUTTONHEIGHT);            //设置最大长度            pButton[i*BUTTONCCLNUM+j]->setMaximumWidth(200);            //设置最小宽度            pButton[i*BUTTONCCLNUM+j]->setMinimumHeight(40);           // pButton[i*BUTTONCCLNUM+j]->setGeometry(10,10,BUTTONWIDTH,BUTTONHEIGHT);            qglMain->addWidget(pButton[i*BUTTONCCLNUM+j],3+i,j);        }    //pButton[0] clicked()    QObject::connect(pButton[0],SIGNAL(clicked()),this,SLOT(OpenFiles()));    QObject::connect(pButton[1],SIGNAL(clicked()),this,SLOT(StartPlay()));    QObject::connect(pButton[2],SIGNAL(clicked()),this,SLOT(StopPlay()));    QObject::connect(pButton[3],SIGNAL(clicked()),this,SLOT(DetectPlay()));    //SpinBoxSlider    pspinBox=new QSpinBox;    pSlider=new QSlider(Qt::Horizontal);    pSlider->resize(300,30);    pspinBox->resize(30,30);    pspinBox->setRange(0,140);    pSlider->setRange(0,140);    //信号和槽    QObject::connect(pspinBox,SIGNAL(valueChanged(int)),pSlider,SLOT(setValue(int)));    QObject::connect(pSlider,SIGNAL(valueChanged(int)),pspinBox,SLOT(setValue(int)));    pspinBox->setValue(35);    qglMain->addWidget(pSlider,6,0,1,2);    qglMain->addWidget(pspinBox,6,2);    //Tableview    ptableView=new QTableView;    ptableView->resize(500,240);    //添加表头    m_model=new QStandardItemModel();    m_model->setColumnCount(5);    m_model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit("number"));    m_model->setHeaderData(1,Qt::Horizontal,QString::fromLocal8Bit("name"));    m_model->setHeaderData(2,Qt::Horizontal,QString::fromLocal8Bit("sex"));    m_model->setHeaderData(3,Qt::Horizontal,QString::fromLocal8Bit("adress"));    m_model->setHeaderData(4,Qt::Horizontal,QString::fromLocal8Bit("time"));    //设置表格属性    ptableView->setModel(m_model);    //表头信息显示居左    ptableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);    // ptableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);    //设置列宽不可变  //ptableView->horizontalHeader()->setResizeContentsPrecision(QHeaderView::Fixed); // ptableView->horizontalHeader()->setResizeContentsPrecision(QHeaderView::Fixed);    ptableView->setColumnWidth(0,101);    ptableView->setColumnWidth(1,102);    ptableView->setColumnWidth(2,102);    ptableView->setColumnWidth(2,105);    ptableView->setColumnWidth(2,105);    ptableView->verticalHeader()->hide();    //添加行    for(int i=0;i<6;i++)    {        m_model->setItem(i,0,new QStandardItem("201403024102"));        //设置字符颜色  //      m_model->item(i,0)->setForeground(QBrush(QColor((255,0,0)));        //设置字符位置     //   m_model->item(i,0)->setTextAlignment(Qt::AlignCenter);        m_model->setItem(i,1,new QStandardItem(QString::fromUtf8("冯策")));        m_model->setItem(i,2,new QStandardItem(QString::fromUtf8("冯策")));    }    qglMain->addWidget(ptableView,2,3,6,5);    //将对话框固定,不允许用户更改   // qglMain->setSizeConstraint(QGridLayout::SetFixedSize);    this->resize(1080,720);    this->setLayout(qglMain);}qtWidget_ui::~qtWidget_ui(){    delete ui;}//打开文件void qtWidget_ui::OpenFiles(){    fileName=QFileDialog::getOpenFileName(this,tr("Open File"),"/",tr("All File(*.*)"));    QFile file(fileName);    m_fileInof=QFileInfo(fileName);    m_fileName=m_fileInof.fileName();    m_filePath=m_fileInof.absolutePath()+"/"+m_fileName;    //去掉边框设定    qlabVdo->setFrameStyle(QFrame::NoFrame);    //qlabVdo->setText(m_filePath);   // m_picProc->m_falge=true;    if(!m_picProc->m_falge)    {        m_thrProc->quit();        m_picProc->m_falge=true;    }    if(file.open(QIODevice::ReadOnly|QIODevice::Text))     {     m_getFileName=m_filePath.toStdString();     m_picProc->m_getFileName=m_getFileName;     VideoCapture capture(m_getFileName);     Mat frame;     capture>>frame;     showImage(qlabVdo,frame);     pButton[1]->setEnabled(true);     pButton[2]->setEnabled(true);     pButton[3]->setEnabled(true);    }    else    {        QMessageBox::information(NULL,NULL,"open file error");    }}//开始播放void qtWidget_ui::StartPlay(){    m_picProc->m_falge=true;    m_picProc->moveToThread(m_thrProc);    connect(m_thrProc,SIGNAL(started()),m_picProc,SLOT(onProc()));    m_thrProc->start();    pButton[0]->setEnabled(false);    pButton[1]->setEnabled(false);}//停止播放void qtWidget_ui::StopPlay(){    m_picProc->m_falge=false;  //  pButton[0]->setEnabled(true);    pButton[1]->setEnabled(true);}void qtWidget_ui::DetectPlay(){    pButton[0]->setEnabled(true);}

Qt在lable上显示opencv的图像

void showImage(QLabel *qlabShow,Mat cmImage){    Mat cmShow = cmImage.clone();    cvtColor(cmShow,cmShow,COLOR_BGR2RGB);    QImage qiImage = QImage((const uchar*)(cmShow.data), cmShow.cols, cmShow.rows,                            cmShow.cols*cmShow.channels(), QImage::Format_RGB888);    QImage qiShow = qiImage.scaled(qlabShow->width(),qlabShow->height(),Qt::IgnoreAspectRatio, Qt::SmoothTransformation);    qlabShow->setPixmap(QPixmap::fromImage(qiShow));    qlabShow->show();}
原创粉丝点击