Qt多线程的用法

#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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值