• 7290阅读
  • 5回复

qt3下的moc问题 [复制链接]

上一主题 下一主题
离线lishuzheng
 

只看楼主 倒序阅读 楼主  发表于: 2008-01-01
qt3下的moc问题
— 本帖被 XChinux 执行加亮操作(2008-07-17) —
我在qt designer下编写了以下程序(书上的),由于编译的是时候有Q_OBJECT,所以,我就先用moc  ×××.cpp -o ××.moc  生成了moc文件 ,然后用命令#include ×××.moc加入到×××.cpp文件中,然后用qmake ×××.pro命令 ,再用make时,出现了错误提示,请问我的这个编译步骤哪里出错了?



#include <qapplication.h>
#include <qwidget.h>
#include <qwidgetstack.h>
#include <qpushbutton.h>
#include <slots.moc>
class MyMainWindow:public QWidget
{
    Q_OBJECT
    public:
    MyMainWindow();
    private:
    QWidgetStack *widgetstack;
    QPushButton *b1,*b2,*cb1,*cb2;
    public slots:  //14
    void showb1();
    void showb2();
};                                                                                          //第17行
void MyMainWindow::showb1()
{
    widgetstack->raiseWidget(b1);
}
void MyMainWindow::showb2()
{
    widgetstack->raiseWidget(b2);
}
MyMainWindow::MyMainWindow()
{                          //27
    setGeometry(100,100,150,130);
    widgetstack=new QWidgetStack(this);
    widgetstack->setGeometry(10,10,130,80);
    b1=new QPushButton("Button 1",this);
    b2=new QPushButton("Button 2",this);
   
    widgetstack->addWidget(b1,1);
    widgetstack->addWidget(b2,2);
   
    cb1=new QPushButton("Raise b1",this);
    cb1->setGeometry(10,100,60,20);
    cb2=new QPushButton("Raise 2",this);
    cb2->setGeometry(80,100,60,20);
   
    connect(cb1,SIGNAL(clicked()),this,SLOT(showb1()));
    connect(cb2,SIGNAL(clicked()),this,SLOT(showb2()));
}
int main(int argc,char **argv)
{
    QApplication a(argc,argv);
    MyMainWindow w;
    a.setMainWidget(&w);
    w.show();
    return a.exec();
}




slots.moc:17: syntax error before `::' token
slots.moc:22: syntax error before `::' token
slots.moc:23: `MyMainWindow' was not declared in this scope
slots.moc:23: parse error before `::' token
slots.moc:26: syntax error before `::' token
slots.moc:34: syntax error before `::' token
slots.moc:45: syntax error before `::' token
slots.moc:56: ISO C++ forbids declaration of `metaObj' with no type
slots.moc:64: invalid conversion from `QMetaObject*' to `int'
slots.moc:65: syntax error before `.' token
slots.moc:69: syntax error before `::' token
slots.moc:76: syntax error before `::' token
slots.moc:87: syntax error before `::' token
slots.moc:93: syntax error before `::' token
slots.moc:98: syntax error before `::' token
slots.moc:23: warning: `QMetaObjectCleanUp cleanUp_MyMainWindow(...)' declared
  `static' but never defined
离线foxyz

只看该作者 1楼 发表于: 2008-01-02
晕倒!!!
moc不是这样子用的。你没好好看手册阿!
moc是用于对添加了个人的signal或者slot的需要使用Q_OBJECT来指

示的头文件自动产生出cpp文件的!
比如:你有个myheader.h头文件,里边包含了Q_OBJECT
你需要用下边的方式生成一个cpp文件:moc -o moc_myheader.cpp

myheader.h
然后把这个cpp文件也加入你的project.
或者直接在*.pro文件里加上 qt += moc
这样qmake会自动帮你做上边的事情的
离线lishuzheng

只看该作者 2楼 发表于: 2008-01-03
谢谢了foxyz      已经解决了
离线foxyz

只看该作者 3楼 发表于: 2008-01-08
hehe,you are welcome
离线youngst

只看该作者 4楼 发表于: 2008-01-16
按楼主,说的在 书上写的 ,在一个CPP文件里,MOC  XX.CPP -O XX.MOC
把#include "XX.MOC"放在CPP最后面

如果有头文件 ,就按1楼的方法
离线chase
只看该作者 5楼 发表于: 2009-04-29
应该是在*.pro文件里修改CONFIG参数,如:CONFIG += uitools qt moc,这样qmake *.pro;make时qt能自动生成moc_*.cpp文件,并且将生成结果link进去
快速回复
限100 字节
 
上一个 下一个