1.hello.desktop文件
http://blog.chinaunix.net/uid-26729065-id-3212772.html
[Desktop Entry]
Comment=An Example Program <---描述
Exec=hello <---可执行程序
Icon=Games <----图标
Type=Application <---类型
Name=Hello2440 <----图标下面的名字
2.hello.pro文件
CONFIG += qtopiaapp
CONFIG -= buildQuicklaunch
DESTDIR = $(PWD)
INCLUDEPATH += . /usr/local/include/opencv
LIBS += /usr/local/lib/libcv.so.4 \
/usr/local/lib/libcvaux.so.4 \
/usr/local/lib/libcxcore.so.4 \
/usr/local/lib/libhighgui.so.4 \
/usr/local/lib/libml.so.4 \
-lpthread
HEADERS = hello.h //头文件
SOURCES = hello.cpp //源文件
SOURCES+=main.cpp
desktop.files = hello.desktop //桌面文件
desktop.path = /apps/Applications
INSTALLS += desktop
INTERFACES = hello_base.ui
TARGET = hello //生成的可执行文件
3.main.cpp
#include "hello.h"
#include <qtopia/qpeapplication.h>
QTOPIA_ADD_APPLICATION("hello",HelloForm)//类名称
QTOPIA_MAIN
4.hello.h
#ifndef HELLOFORM_H
#define HELLOFORM_H
#include "hello_base.h"
#include <pthread.h>
#include <qtimer.h>
#include <qlabel.h>
#include <qstring.h>
#include <qtimer.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <qpixmap.h>
#include <qimage.h>
#include <qdir.h>
//class QDir;
class HelloForm : public HelloBaseForm(designer设计的类名)
{
Q_OBJECT
public:
HelloForm( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
virtual ~HelloForm();
protected:
virtual void SayHello();
QTimer *timer;
int i, j, t1, t2, t3;
QDir dir;
private slots:
void showThread();
void test1();
void test2();
protected:
void timerEvent( QTimerEvent *e );
};
#endif // HELLOFORM_H
槽是普通的 C++ 成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。
既然槽是普通的成员函数,因此与其它的函数一样,它们也有存取权限。槽的存取权限决定了谁能够与其相关联。同普通的 C++ 成员函数一样,槽函数也分为三种类型,即 public slots、private slots 和 protected slots。
- public slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。这对于组件编程非常有用,你可以创建彼此互不了解的对象,将它们的信号与槽进行连接以便信息能够正确的传递。
- protected slots:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。这适用于那些槽,它们是类实现的一部分,但是其界面接口却面向外部。
- private slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。这适用于联系非常紧密的类。
槽也能够声明为虚函数,这也是非常有用的。
槽的声明也是在头文件中进行的。
5.hello.cpp
#include "hello.h"
#include <qlabel.h>
#include <qpushbutton.h>
#include <qtextcodec.h>
#include <qtopia/global.h>
#include <qtopia/applnk.h>
#include <qtopia/qpeapplication.h>
#include <qfile.h>
#include <qdir.h>
QTextCodec *codec=QTextCodec::codecForName("UTF-8");
HelloForm::HelloForm( QWidget* parent, const char* name, WFlags fl):
HelloBaseForm(parent, name, fl), dir("/mnt")
{
i=j=0;
setCaption(codec->toUnicode("第一个测试程序"));//qt文字编码
PushButton1->setText(codec->toUnicode("你好"));
timer = new QTimer(this);
timer->start(10);
connect(timer, SIGNAL(timeout()), this, SLOT(test1()));/*QTimer类提供了定时器信号和单触发定时器。 它在内部使用定时器事件来提供更通用的定时器。QTimer很容易使 用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射 timeout()信号 */
t1=startTimer( 100 );//其返回值为t1,即其timerId为t1
t2=startTimer( 10 );//其返回值为t2,即其timerId为t2
t3=startTimer( 10000 );//其返回值为t3,即其timerId为t3
}
HelloForm::~HelloForm()
{
}
void HelloForm::showThread()
{
TextLabel1->setNum(i);
TextLabel2->setNum(j);
}
void HelloForm::test1()
{
TextLabel1->setNum(i++);
}
void HelloForm::test2()
{
}
void HelloForm::SayHello()
{
dir.setFilter(QDir::Files);
int i,j=dir.count()-1;
for (i=0;i<=j;i++)
dir.remove(dir[i]);
}
void HelloForm::timerEvent(QTimerEvent *e)
{
if (e->timerId()==t3)
test2();
}