• 4572阅读
  • 4回复

QT的小程序编译遇到问题 [复制链接]

上一主题 下一主题
离线lish0001
 

只看楼主 正序阅读 楼主  发表于: 2009-04-21
QT 问题请教
最近需要用QT做毕设,刚开始学习,遇到了问题,自己无法解决,哪位达人能帮我解决一下啊??
主要问题就是在将一个工程里的三个文件联合调用的时候,遇到了问题。我录入的是清华大学的《QT程序设计》这本书上的第七章的例7.7. 这个实现的功能和7.6一样,只是将7.6里面的一个main.cpp文件拆成了三个文件,但就在拆的过程中遇到了问题,由于书上没有源码,我只好估摸个大概将三个文件写出来了,但在我有qmake 工具编译的时候,出现了error,提示
main.cpp: In constructor `MyWidget::MyWidget(QWidget*, const char*)':
main.cpp`grid' undeclared (first use this function)
main.cpp  Each undeclared identifier is reported only once for each
   function it appears in.)
make: *** [.obj/main.o] Error 1

下面是我的源代码,由于我没有任何QT方面的经验,麻烦看得懂的人指点一二。
[ 此帖被lish0001在2009-04-21 16:00重新编辑 ]
我的空间:http://hi.baidu.com/%B7%C9%CF%E8%5F%C6%D1%B9%AB%D3%A2
离线lish0001

只看该作者 4楼 发表于: 2009-04-26
已解决,这个网上例子上有,现在才知道
我的空间:http://hi.baidu.com/%B7%C9%CF%E8%5F%C6%D1%B9%AB%D3%A2
离线lish0001

只看该作者 3楼 发表于: 2009-04-21
这是一个主函数文件,包含了父窗口的类定义以及对象的操作
#include"lcdrange.h"
#include<qapplication.h>
#include<qfont.h>
#include<qgrid.h>
#include<qpushbutton.h>
class MyWidget:public QVBox
{
public:
       MyWidget(QWidget *parent=0, const char *name=0 );
      
};
MyWidget:: MyWidget(QWidget *parent, const char *name ):QVBox(parent,name)
{
    QPushButton *quit=new QPushButton("Quit",this,"quit");
    
    quit->setFont(QFont("Times",18,QFont::Bold));
    
    connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));  
   LCDRange *previous=0;
   for(int r=0;r<4;r++)
   {
      
       for(int c=0;c<4;c++)
       {
           LCDRange *lr=new LCDRange(grid);
           if(previous)
               connect(lr,SIGNAL(valueChanged(int)),previous,SLOT(setValue(int)));
           previous=lr;
       }
   }
}

int main(int argc,char **argv)
{
    QApplication a(argc,argv);
   MyWidget w;
  
    a.setMainWidget(&w);
    
    w.show();
    return a.exec();
}
[ 此帖被lish0001在2009-04-21 15:59重新编辑 ]
我的空间:http://hi.baidu.com/%B7%C9%CF%E8%5F%C6%D1%B9%AB%D3%A2
离线lish0001

只看该作者 2楼 发表于: 2009-04-21
这是一个cpp文件,包含了对类的具体实现,包括对类的构造函数以及其中的一些API的实现
#include"lcdrange.h"          //包含进头文件
#include<qslider.h>      
#include<qlcdnumber.h>

#include<qslider.h>


LCDRange::LCDRange(QWidget *parent,const char *name):QVBox(parent,name)   //构造函数的实现
{
  
     QLCDNumber *lcd=new  QLCDNumber(2,this,"lcd");
    
     QSlider *slider=new QSlider(Horizontal,this,"slider");
     slider->setRange(0,99);
     slider->setValue(0);
    
     connect(slider,SIGNAL(valueChanged(int)),lcd,SLOT(display(int)));
     connect(slider,SIGNAL(valueChanged(int)),SIGNAL(vlaueChanged(int)));
    
    
}

int LCDRange::value() const          //具体API方法的实现
{
    return slider->value();
}

void LCDRange::setValue(int value)
{
    slider->setValue(value);
我的空间:http://hi.baidu.com/%B7%C9%CF%E8%5F%C6%D1%B9%AB%D3%A2
离线lish0001

只看该作者 1楼 发表于: 2009-04-21
这是包含类的声明的lcdrange.h文件,其中包括类的声明,函数的声明等等


#ifndef LCDRANGE_H
#define LCDRANGE_H

#include<qvbox.h>
class QSlider;           //声明滑动条的类
class LCDRange:public QVBox      //LCD显示的类
{
    
    Q_OBJECT
    public:
    LCDRange(QWidget *parent=0,const char *name=0);          //构造函数
    int value() const;
    public slots:
            void setValue(int);          //槽
    signals:
          void valueChanged(int);   //信号
          
};

#endif
我的空间:http://hi.baidu.com/%B7%C9%CF%E8%5F%C6%D1%B9%AB%D3%A2
快速回复
限100 字节
 
上一个 下一个