编译一个qt调用Mplayer的程序,make的时候,总是显示widget没有名为ui的字段
widget.cpp代码如下:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
widget_mplyaer = new QWidget(this);
startButton= new QPushButton("play");
connect(startButton,SIGNAL(clicked()),this,SLOT(doMplayer()));
process = new QProcess(this);
connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),this, SLOT(mplayerEnded(int, QProcess::ExitStatus))); //mplayerEnded在后面
widget_mplyaer->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
widget_mplyaer->setAttribute(Qt::WA_OpaquePaintEvent );
widget_mplyaer->setMinimumSize(500, 500);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(widget_mplyaer);
layout->addWidget(startButton);
setLayout(layout);
initValue();
}
void Widget::mplayerEnded(int,QProcess::ExitStatus)
{
process->write("quit");
if(!process->waitForFinished(100))
return;
startButton->setText("play");
isPlaying = false;
}
void Widget::doMplayer()
{
if(startButton->text() == "play")
{
qDebug()<<"play ";
QString pro = "./mplayer";
QStringList slist;
slist << "-slave";
slist << "-quiet";
slist << "-wid" << QString::number(widget_mplyaer->winId());
slist << "2.rm";
process->start(pro,slist);
if(!process->waitForStarted(100))
return;
startButton->setText("stop");
isPlaying = true;
}else
{
if(!isPlaying)
return;
qDebug()<<"stop ";
process->write("q");
process->kill();
widget_mplyaer->repaint();
if(!process->waitForFinished(100))
return;
startButton->setText("play");
isPlaying = false;
}
}
void Widget::initValue()
{
isPlaying = false;
}
Widget::~Widget()
{
delete ui;
}
void Widget::closeEvent(QCloseEvent *event)
{
process->write("quit");
process->kill();
if(!process->waitForFinished(100))
return;
event->accept();
}