#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()));
//SpinBox和Slider
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();
}