• 6667阅读
  • 8回复

急!!!新手求教……qt下make不过 [复制链接]

上一主题 下一主题
离线huanxiong618
 
只看楼主 倒序阅读 楼主  发表于: 2010-12-12
编译一个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();  
}
离线浪漫天使
只看该作者 1楼 发表于: 2010-12-13
头文件呢?
方便打包工程上来 让大家编译看看么
离线huanxiong618
只看该作者 2楼 发表于: 2010-12-13
恩……好的,这个是头文件代码:
#ifndef WIDGET_H  
#define WIDGET_H  

#include <QtGui/QWidget>  
#include <QVBoxLayout>  
#include <QProcess>  
#include <QPushButton>  
#include <QDebug>  
#include <QCloseEvent>  

class Widget : public QWidget  
{  
    Q_OBJECT  

public:  
    Widget(QWidget *parent = 0);  
    ~Widget();  
private slots:  
    void doMplayer();  
    void mplayerEnded(int, enum QProcess::ExitStatus);  
protected:  
    void closeEvent(QCloseEvent *);  
private:  
    QPushButton *startButton;  
    void initValue();  
    bool isPlaying;  
    QWidget *widget_mplyaer;  
    QProcess *process;  
};  

#endif // WIDGET_H
离线浪漫天使
只看该作者 3楼 发表于: 2010-12-13
make说的没错啊
你的头文件 确实没有 ui的定义啊。
你再仔细对照一下人家的源代码吧。
离线huanxiong618
只看该作者 4楼 发表于: 2010-12-13
额……我刚接触qt,这个ui……怎么定义啊……谢谢了……
离线huanxiong618
只看该作者 5楼 发表于: 2010-12-13
我对照过代码啊……他那个就是这个样子的……
离线浪漫天使
只看该作者 6楼 发表于: 2010-12-14
把你的代码打包一下放到附件里。
离线dbzhang800

只看该作者 7楼 发表于: 2010-12-14
引用第4楼huanxiong618于2010-12-13 16:06发表的  :
额……我刚接触qt,这个ui……怎么定义啊……谢谢了……


问题应该是出在你刚接触C++,而还不是刚接触Qt。建议先补充C++的基础知识。
离线huanxiong618
只看该作者 8楼 发表于: 2010-12-14
额……谢谢各位大侠,问题已经解决了,非常感谢
快速回复
限100 字节
 
上一个 下一个