当前位置:文档之家› 基于Linux平台的QT开发经验谈

基于Linux平台的QT开发经验谈

基于Linux平台的QT开发经验谈
基于Linux平台的QT开发经验谈

QT的学习及实战经验谈(初识)

2009-05-21 11:13

QT的学习及实战经验谈(初识)

查看RedHat自带QT库

路径:/usr/lib/qt-3.1,查看目录qt3-1下是否有13个文件,若没有,则需要安装。主菜单-系统设置-添加程序-选中KDE软件开发-更新。

在Linux下做一个五子棋的小游戏。

在/home/下创建目录qt,编写一个小程序hello.cpp的C++文件。

下面介绍hello.cpp源程序:

#include

#include //窗口类的头文件

#include //按键类的头文件

int main(int argc,char **argv)

{

QApplication a(argc,argv);

QWidget mainwindow; //定义主窗口对象

mainwindow.setMinimumSize(20,10); //设置最小尺寸

mainwindow.setMaximumSize(200,100); //设置最大尺寸

QPushButton helloworld("Hello World!",&mainwindow); //调用了

//QPushButton的第二个构造函数,

//指定副部件为mainwindow

helloworld.setGeometry(20,20,160,60); //此函数是由其父类继承来的

a.setMainWidget(&mainwindow); //设置mainwindow为主部件

mainwindow.show(); //显示窗口

return a.exec(); //存在一个while循环,等待用户发命令

}

窗口(类)QWidget 按钮(类) QPushButton

特性可关闭可点击

共性可设大小可设大小

两个类是从可视类派生来的,例如函数setGeometry是设置几何尺寸的,窗口和按钮两类都可调用,设置尺寸大小函数也是由其父类继承来的,两类都可以用。

经编译:g++ hello.cpp –o hello –lqt,编译器会报错,未发现所用到的头文件。

分析错误原因:提示中说未找到程序中所用到的头文件,当编译程序时,编译器首先到特定目录下寻找原文件的头文件和函数库:

头文件目录:/usr/include

库文件目录:/lib/ , /usr/lib/

但QT库存放在目录/usr/lib/qt-3.1下,此文件里有三个重要的目录:/bin/;/lib/;/include/.

/bin里存放的是QT库的使用手册;/lib下存放的是库文件,即由原库文件生成目标文件*.o;/include下存放的是各库文件的声明。

因此,在编译时,编译器找不到正确的文件,所以必须对环境变量做修改。

方法一:敲入命令,这样可以暂时修改环境变量,设定其查找路径,但并不能保存修改,在下一次开机后,需要重新设置。

1)#g++ hello.cpp –o hello –lq t –I/usr/lib/qt-3.1/include

2)#export CPLUS_INCLUDE_PATH=/usr/lib/qt-3.1/include

#g++ hello.cpp –o hello –lqt

以上两种方法等价。

再次编译后仍旧有错,找不到库文件。

指定库路径:

1)#g++ hello.cpp –o hello –lqt –L/usr/lib/qt-3.1/lib

2)#export LIBRARY_PATH=/usr/lib/qt-3.1/lib

#g++ hello.cpp –o hello –lqt

最终生成可执行文件hello。

其中,-lqt是连接QT库的参数语句,-lqt等价于-libqt.so,它是一个动态库,它包含了众多库文件,链接时只会把所需库文件链接进来,这样就不会使最终生成的文件过大。

知识点:gcc -I +头文件路径

-L +库文件路径

-l +链接库

方法二:将环境变量添加到/etc/profile/内,它是一个类似脚本的文件,每次开机都会执行里面的语句,即系统在开机时自动执行改变路径的命令,来修改环境变量。

添加内容:CPLUS_INCLUDE_PATH=/usr/lib/qt-3.1/include

LIBRARY_PATH=/usr/lib/qt-3.1/lib

export CPLUS_INCLUDE_PATH LIBRARY_PATH

编译C++常用命令:(源文件hello.cpp)

#qmake –v 可查看qt版本

#qmake –project 产生一个工程文件qt.pro

#qmake 产生Makefile文件Makefile

#make 生成目标文件和可执行文件hello.o、qt。

生成的Makefile缺少句子:LIBS:缺少-lqt,可手工加上。

QT的学习及实战经验谈(Qt3库)上

2009-05-21 11:21

//***********************************************************

3.1创建第一个主部件

创建主部件的方法是基于QWidget或QDialog类创建一个用户类。可以使用用户类通过公有继承派生于QWidget类,在其中调用一些成员函数来定义窗口外观。

题目要求:创建一个空的窗口,并显示在屏幕上。大小为200*120.窗口大小不可调整。

源程序:3-1.cpp

#include

#include

#include

#include

//在类的声明里,我们只

//需要包含新的成员。其它的

//方法都从QWidget类中继承来:

class MyMainWindow:public QWidget

{

QPushButton *b;

QLabel *l;

public:

MyMainWindow();

};

MyMainWindow::MyMainWindow() {

//设置窗口的最大、最小尺寸

//我们不需要添加this指针,

//因为C++默认是现在的类setMinimumSize(400,300); setMaximumSize(400,300);

b=new QPushButton("hello world!",this); b->setGeometry(20,20,160,80);

l=new QLabel("label",this);

l->setGeometry(100,90,160,93);

}

int main(int argc,char **argv)

{

//创建要求的应用类对象a QApplication a(argc,argv);

//创建MyMainWindow类的对象,

//并设置其为主视图MyMainWindow w;

a.setMainWidget(&w);

//显示主窗口对象,并且

//它的子视图也会显示到屏幕

w.show();

//等待用户命令

a.exec();

}

//**************************************************************

QT库与用户的交互方式,例如按钮、滑块,是通过使用信号和槽。信号和槽是相互关联的函数题目要求:添加退出按钮

3-5.cpp

#include

#include

#include

#include

//在类的声明里,我们只

//需要一个新的构造函数。

//其它的成员都是从类QWidget中继承来的:

class MyMainWindow:public QWidget

{

QPushButton *b;

QLabel *l;

public:

MyMainWindow();

};

MyMainWindow::MyMainWindow()

{

setGeometry(100,100,200,170);

//setMinimumSize(400,300);

//setMaximumSize(400,300);

b=new QPushButton("Quit!",this);

b->setGeometry(20,20,160,80);

b->setFont(QFont("Times",18,QFont::Bold));

l=new QLabel(this);

l->setGeometry(10,110,180,50);

l->setText("If you click the button above,

\nthe whole program will exit");

l->setAlignment(AlignCenter);

//这里按钮b的clicked()信号与qApp的槽quit()链接,当点击按钮时,将产生QPushButton::clicked()信号,导致qApp的quit()槽被执行,从而程序退出。

那么,什么是qApp呢?qApp是Qt的一个内置指针。它总是指向程序中的QApplication对象(这里指a)。//

connect(b,SIGNAL(clicked()),qApp,SLOT(quit()));

}

int main(int argc,char **argv)

{

QApplication a(argc,argv);

MyMainWindow w;

a.setMainWidget(&w);

w.show();

return a.exec();

}

//**************************************************************

信号和槽的使用

题目要求:利用滑块来改变LCD显示的值

4-1.cpp

#include

#include

#include

#include

#include

#include

//在类的声明里,我们只

//需要一个新的构造函数。

//其它的成员都是从类QWidget中继承来的:

class MyMainWindow:public QWidget

{

QPushButton *b;

QLCDNumber *lcd;

QSlider *slider;

public:

MyMainWindow();

};

MyMainWindow::MyMainWindow()

{

setGeometry(100,100,300,200);

//setMinimumSize(400,300);

//setMaximumSize(400,300);

b=new QPushButton("Quit!",this);

b->setGeometry(10,20,80,40);

b->setFont(QFont("Times",18,QFont::Bold));

lcd=new QLCDNumber(2,this);

lcd->setGeometry(100,10,190,180);

slider=new QSlider(Vertical,this);

slider->setGeometry(10,60,80,130);

//下面一行代码,使点击按键1,程序退出

connect(b,SIGNAL(clicked()),qApp,SLOT(quit()));

//下面一行链接滑块和显示器,使数字随着滑块的移动而改变connect(slider,SIGNAL(valueChanged(int)),lcd,SLOT(display(int))); }

int main(int argc,char **argv)

{

QApplication a(argc,argv);

MyMainWindow w;

a.setMainWidget(&w);

w.show();

return a.exec();

}

//**************************************************************

用户自定义槽,需另外把自定义类做成声明函数,类中成员函数的实现可放在源函数里。4-3.h(类的声明)

#include

#include

#include

#include

#include

class MyMainWindow:public QWidget

{

//这个宏定义是不可缺少的

Q_OBJECT;

//用户自定义槽

public slots:

void SetValue();

void ChangeValue();

//用户自定义信号

signals:

void ValueChanged();

//定义两个数据成员

private:

QPushButton *b1;

QPushButton *b2;

//构造函数

public:

MyMainWindow();

};

类的函数成员的实现在源程序中

4-3.cpp(源程序)

#include <4-3.h>

void MyMainWindow::SetValue()

{

//向自定义信号发送信号

emit ValueChanged();

}

void MyMainWindow::ChangeValue()

{

cout<<"test!"<

}

MyMainWindow::MyMainWindow()

{

//设置主窗口大小

setGeometry(100,100,300,200);

//按键1:设置其标识符Print,

//和坐标位置、几何大小,

//第三句设置字体:

b1=new QPushButton("Print!",this);

b1->setGeometry(10,20,80,40);

b1->setFont(QFont("Times",18,QFont::Bold));

//按键1:设置其标识符Quit,

//和坐标位置、几何大小,

//第三句设置字体:

b2=new QPushButton("Quit!",this);

b2->setGeometry(10,80,80,40);

b2->setFont(QFont("Times",18,QFont::Bold));

//ValueChanged收到信号,就给自定义槽发送信号,ChangeValue则打印字符串connect(this,SIGNAL(ValueChanged()),this,SLOT(ChangeValue()));

//点击1按键,向自定义槽发送信号

connect(b1,SIGNAL(clicked()),this,SLOT(SetValue()));

//点击2按键,程序退出

connect(b2,SIGNAL(clicked()),qApp,SLOT(quit()));

}

int main(int argc,char **argv)

{

//定义一个应用类对象

QApplication a(argc,argv);

//定义一个应用类对象

MyMainWindow w;

//设置w为主窗口

a.setMainWidget(&w);

//显示w

w.show();

return a.exec();

}

QT的学习及实战经验谈(Qt3库)下

2009-05-21 11:24

9-1.cpp

#include

#include

#include

class MyMainWindow:public QWidget

{

public:

MyMainWindow();

void paintEvent(QPaintEvent *);

QPainter *paint;

};

//此函数是由系统调用的,每当第一次生成或被挡住,它都会再次被调用void MyMainWindow::paintEvent(QPaintEvent *)

{

//此句最好做成局部变量的定义,否则将导致重复申请动态内存

paint=new QPainter;

paint->begin(this);

//设置边框颜色、线形和线的宽度

paint->setPen(QPen(blue,10,QPen::SolidLine));

//设置边框内部颜色全部填充为红色

paint->setBrush(QBrush(red,SolidPattern));

//绘制矩形

paint->drawRect(20,20,160,160);

//绘图介绍

paint->end();

}

MyMainWindow::MyMainWindow()

{

//设置主窗口坐标位置、大小

setGeometry(100,100,200,200);

}

int main(int argc,char **argv)

{

QApplication a(argc,argv);

MyMainWindow w;

a.setMainWidget(&w);

w.show();

}

//************************************************************** 对上一个例子做一个扩展,画一个4*4棋盘

9-1-1.cpp

#include

#include

#include

class MyMainWindow:public QWidget

{

public:

MyMainWindow();

private:

//绘图函数声明

void paintEvent(QPaintEvent *);

QPainter *paint;

};

void MyMainWindow::paintEvent(QPaintEvent *)

{

int i;

int x=20,y=20;

paint=new QPainter;

paint->begin(this);

paint->setPen(QPen(blue,4,QPen::SolidLine));

paint->setBrush(QBrush(white,SolidPattern));

//画5条横线

for(i=0;i<5;i++)

{

paint->drawLine(20,y+80*i,340,y+80*i);

}

//画5条竖线

for(i=0;i<5;i++)

{

paint->drawLine(x+80*i,20,x+80*i,340);

}

在棋盘正中做两个红棋子

paint->setBrush(QBrush(red,SolidPattern));

paint->drawEllipse(100,100,80,80);

paint->drawEllipse(180,180,80,80);

在棋盘正中做两个蓝棋子

paint->setBrush(QBrush(green,SolidPattern));

paint->drawEllipse(180,100,80,80);

paint->drawEllipse(100,180,80,80);

paint->end();

}

MyMainWindow::MyMainWindow()

{

setGeometry(100,100,400,400);

}

int main(int argc,char **argv)

{

QApplication a(argc,argv);

MyMainWindow w;

a.setMainWidget(&w);

w.show();

a.exec();

}

//************************************************************** 在主窗口上加一个标签,在标签上做出一个动画。

15-1.h

#include

#include

#include

#include

#include

#include

#include

class MyMainWindow:public QWidget {

//宏定义

Q_OBJECT;

public:

MyMainWindow(char *);

QMovie movie; //定义动画的对象public slots:

void UnPause(); //继续播放

void Pause(); //暂停

void addSpeed(); //加速动画的播放速度void decSpeed(); //减慢动画的播放速度private:

unsigned long num;

QLabel *label;

QPushButton *b1;

QPushButton *b2;

QPushButton *b3;

QPushButton *b4;

QPushButton *b5;

};

15-1.cpp

#include "15-1.h"

void MyMainWindow::UnPause()

{

movie.unpause(); //继续播放

}

void MyMainWindow::Pause()

{

movie.pause(); //暂停播放

}

void MyMainWindow::addSpeed()

{

num+=20;

movie.setSpeed(num); //以20%增加速度

}

void MyMainWindow::decSpeed()

{

num-=20;

movie.setSpeed(num); //以20%减少

}

//str里存放动画的文件名

MyMainWindow::MyMainWindow(char *str):movie(str) {

setGeometry(100,100,300,280);

num=100; //初始速度为100

b1=new QPushButton("Continue!",this);

b1->setGeometry(130,20,120,40);

b1->setMinimumSize(40,20);

b1->setFont(QFont("Times",18,QFont::Bold));

b2=new QPushButton("Pause!",this);

b2->setGeometry(130,70,120,40);

b2->setMinimumSize(40,20);

b2->setFont(QFont("Times",18,QFont::Bold));

b3=new QPushButton("Hurry!",this);

b3->setGeometry(130,120,120,40);

b3->setMinimumSize(40,20);

b3->setFont(QFont("Times",18,QFont::Bold));

b4=new QPushButton("Slow!",this);

b4->setGeometry(130,170,120,40);

b4->setMinimumSize(40,20);

b4->setFont(QFont("Times",18,QFont::Bold));

b5=new QPushButton("Quit!",this);

b5->setGeometry(130,220,120,40);

b5->setMinimumSize(40,20);

b5->setFont(QFont("Times",18,QFont::Bold));

label=new QLabel(this);

label->setGeometry(10,10,120,60);

label->setMovie(movie);

QVBoxLayout *vbox=new QVBoxLayout(this);

vbox->addWidget(label);

vbox->addWidget(b1);

vbox->addWidget(b2);

vbox->addWidget(b3);

vbox->addWidget(b4);

vbox->addWidget(b5);

connect(b1,SIGNAL(clicked()),this,SLOT(UnPause())); connect(b2,SIGNAL(clicked()),this,SLOT(Pause())); connect(b3,SIGNAL(clicked()),this,SLOT(addSpeed())); connect(b4,SIGNAL(clicked()),this,SLOT(decSpeed())); connect(b5,SIGNAL(clicked()),qApp,SLOT(quit()));

}

int main(int argc,char **argv)

{

QApplication a(argc,argv);

//给构造函数发送动画名,并且文件必须使.gif格式

MyMainWindow w("trolltech.gif");

a.setMainWidget(&w);

w.show();

a.exec();

}

在Qt程序窗口上点击任意区域移动窗体

在Qt程序窗口上点击任意区域移动窗体方法是截取组件Widget的鼠标事件函数,自己处理鼠标点击和移动的事件.

V oid MyWidget::mouseMoveEvent(QmouseEvent *e)

{

Qpoint newpos=e->globalPos();//获得鼠标相对于屏幕坐标系的位置

Qpooint upLeft=pos0+newpos-last;

Move(upLeft); //选定区域

}

V oid MyWidget::mousePressEvent(QmouseEvent *e)

{

last=e->globalPos();//获得鼠标相对于屏幕坐标系的位置

pos0= e->globalPos()-e->pos();

}

解释:

e->globalPos(); //获得鼠标相对于屏幕坐标系的位置

e->pos(); //鼠标相对于窗体左上角的位置

pos0; //窗体左上角的位置

upLeft; //新的窗体左上角的位置

这里,我们取得的鼠标位置是绝对位置,即相当于窗口的位置,同时也记录下窗体左上角的位置,当鼠标移动时,取得新的绝对位置,则窗口做上角的新位置应该时原来位置与鼠标移动的位置之差.

---------------------------------------------------------------------------------

在Qt中创建无边框窗口

首先要设置窗体组件的Wflags是WstyleNoBorder,无边框窗口要求对整个窗口使用图像掩码.

具体方法如下:

设置Qpixmap类型成员变量m_pixmapBack;

在构造函数中书写:

m_pixmapBack.load(“bg.bmp”);

Qbitmap bitmaptmp(“bg.bmp”);//作为掩码的位图,白色部分透明,黑色部分保留.

setMask(bitmaptmp);

setBackgroundPixmap(m_pixmapBack);

-----------------------------------------------------------------------------------

对QPixmap对象进行缩放

在Qt中进行绘图操作的时候我们常常需要对位图进行缩放,

利用QWMatrix类就可以很轻松的完成此功能,

示例代码如下:

QPixmap pm ; // do something to pm

if ( !pm.isNull() )

{

QWMatrix m;//创建一个QWMatrix类的对象

m.scale(0.5f, 0.5f);//设立一个进行缩小到1/2的变换矩阵

pm = pm.xForm(m);//进行变换操作

}

----------------------------------------------------------

Qt系统对话框中文化

1.安装Qt4.5的目录为/opt/qtsdk-2009.03/qt/translations/,在此目录下有***_zh_CN.ts 和***_zh_CN.qm

把它们拷贝到你的工程目录下。

2.在主文件加入下列代码:

QTranslator translator(0);

translator.load("qt_zh_CN.qm");

QApplication app(argc, argv);

app.installTranslator(&translator);

别忘了头文件包含QTranslator

3.编译运行你的程序,就可以实现中文化了。

Qt: 绘图基础

QPainter 能绘制: point, line, rectangle, ellipse, arc, chord, polygon, pie segment, Bezier curve, QPixmap, QImge

Qt支持的高级特性: antialising, alpha blending, gradient fill, vector path.

QPaint在什么上绘制呢? 在"paint device": QWidget, QPixmap, QImage, QSvgGenerator, 连接QPrinter来打印和生成PDF文档.

通常在protected void paintEvent(QPaintEvent *event)中进行绘制.

protected :

virtual void paintEvent(QPaintEvent *event) {

QPainter painter(this); // Pointer of the paint device

..

}

QPainter的3个主要设置是: pen, brush, font.

painter.setPen(QPen(..));

painter.setBruch(QBrush(..));

painter.setFont(QFont(..));

painter.setRenderHint(QPainter::Antialiasing, true);

设置了bursh之后, 画的是效果即fill.

QPainter的属性影响绘制的图形.

通常使用painter.paintXXX(..)来绘制图形.

----------------------------------------------------------

Qt: 给Widget设置背景图片

1.在要换背景的类的构造函数中装载一个图片,变量要为全局的,接下来会用到

backgroundImage.load(":image/bg.png");

setAutoFillBackground(true);

2.实现resizeEvent函数,在里面画背景

void Example::resizeEvent(QResizeEvent *event) {

QWidget::resizeEvent(event);

嵌入式蓝牙文件传送方案的实现

嵌入式蓝牙文件传送方案的实现 摘要:针对蓝牙技术在无线通信中的应用需求,基于ARM9微处理器S3C2440的嵌入式系统,设计并实现了蓝牙文件传送方案。系统已经通过板级验证及实际应用测试,完全实现系统设计功能。关键词:嵌入式;蓝牙;单点传送;多点传送 蓝牙是一种低成本、短距离无线通信技术,工作频段使用全球统一开放的2.4 GHz的ISM 频段[1],并将此频段分为79个跳频点,采用跳频技术,增强了蓝牙通信的可靠性。蓝牙技术现已被广泛应用于无线通信领域中,如个人无线通信设备、无线网络通信以及各种传宣系统[2]。利用蓝牙技术实现不同类型的文件传送是蓝牙通信的重要应用,而传统的基于蓝牙1.0规范的蓝牙通信只支持单点传输,随着蓝牙技术的发展,蓝牙 2.0规范中增加了EDR(Enhance Data Rate)技术,提高了蓝牙数据传输的吞吐量,为蓝牙多点通信提供了条件。本文依据蓝牙2.0规范,结合TDD技术,在实现了单点文件传送的基础上,成功完成了嵌入式系统对远程蓝牙设备的多点文件传送方案,并应用个人区域网络技术实现了嵌入式系统与PC机之间的网络文件传送,扩展了蓝牙通信在网络领域的应用。蓝牙文件传送和网络文件传送功能为广告产业及其他信息发布相关产业提供了广阔的发展空间,具有良好的市场前景。1 方案设计概述方案设计以ARM嵌入式系统作为硬件实现平台,并基于Linux操作系统,完成蓝牙文件传送方案。文件单点传送方案依据对象交换协议OBEX(Object Exchange),利用蓝牙官方协议栈BlueZ以及openobex上层应用函数库实现对象推送功能,从而完成对远程设备的文件单点传送。文件多点传送方案将在底层应用全双工时分复用(TDD)技术以及EDR (Enhance Data Rate)技术实现蓝牙数据通道共享和宽带、高吞吐量数据发送,在上层以文件单点传送方案为基础,辅以嵌入式技术建立并管理多个文件发送进程,完成文件向多个远程设备的同时发送,加入了重发机制以保证文件多点传送的可靠性。此外,基于个人区域网络技术的网络文件传送功能,使用户可在PC机端以FTP方式访问并更新嵌入式系统中的文件。 2 方案硬件架构本方案基于ARM硬件开发平台,以SAMSUNG S3C2440作为核心处理器,并与64 MB SDRAM和64 MB Flash共同组成核心嵌入式系统,运行ARM-Linux-2.6.12内核操作系统,其中内核配置蓝牙子系统,可为USB蓝牙适配器提供驱动。蓝牙适配器作为系统的核心通信部件接至USB Device接口,并通过适配器完成文件传送功能。同时本硬件系统易于功能扩展和系统移植,开发人员可通过USB Host接口将操作系统内核以及上层应用程序下载到SDRAM或烧写至Flash中,并通过RS232串口对应用程序进程调试。硬件整体架构。 3 方案软件框架软件框架主要由蓝牙核心协议、会话层协议以及上层应用程序构成,。其中蓝牙核心协议包括:RF协议、基带(Baseband)协议、LMP、L2CAP,主要完成蓝牙数据由逻辑链路层到实际物理通道的控制和处理。 会话层协议将建立对应功能的模型描述,并定义相关操作方法,为上层应用程序提供接口。其中RFCOMM协议提供对基于L2CAP协议的串口仿真,基于ETSI07.10,可支持在两个蓝牙设备之间同时保持高达60路的通信连接。其次,本方案利用服务发现协议(SDP)获取周边蓝牙设备服务信息,并自动筛选出带有对象推送服务的远程设备作为发送目标,此协议由BlueZ 所提供的接口函数实现。而OBEX作为实现文件传送的核心协议,将为被传送文件建立对象模型,并面向对象及传送过程定义对应操作方法,以实现文件传送。PAN协议用于建立蓝牙无线网络与以太网之间的访问点,以完成与TCP/IP之间的无缝连接。上层应用程序将基于应用层协议所提供的接口函数,主要依据对象交换协议(OBEX)实现对象推送(OBEX PUSH)功能,从而完成文件的单点传送,并在此基础上,结合Linux多进程技术实现文件多点传送。此外,利用BlueZ提供的PAN工具实现嵌入式系统与PC机之间的组网,完成网络文件传送功能。4 文

qt程序在linux console模式下运行

Qt程序在linux Console模式下运行 原文链接:在x86非图形界面下运行QtEmbedded程序 众所周知,一般我们在桌面环境下可以使用qvfb这个工具作为运行QtEmbedded程序的模拟器环境,但我们今天不讲这些大家都知道的事情。 回顾一下QtEmbedded对系统以及硬件的要求,一般来说只有下面少少的几点: 1、 Linux内核+ framebuffer驱动+ socket支持 2、 /tmp可写 3、有合适的键盘和鼠标(触摸屏)驱动并做好与Qt的集成 4、合适的编译器和交叉编译工具链(toolchain) 那么聪明的同学已经想到了,为什么我们不能直接在桌面的linux系统中运行QtE程序呢?似乎QtE的要求我们的桌面系统一样可以满足亚。答案当然是肯定的。 一条一条来说的话, 1内核支持framebuffer和socket这一条大部分发行版默认的内核就可以; 2就不用说了;3在QtE的源码里自带了对普通桌面鼠标和键盘硬件的驱动;4对于X86系统,普通的gcc就可满足,一般linux发行版带的gcc版本也基本可以满足QtE编译的要求。 那么,怎么才能实现我们的想法呢?还是要一步一步按部就班来做。以笔者的Ubuntu 为例,介绍一下设置的具体步骤。 编译QtEmbedded 这一步编译和编译qvfb版本区别不大,只是不再需要configure的时候加-qvfb参 数,只用不加参数的configure足矣。 # tar -zxvf qt-em bedded-linux-opensource-src-4.5.1.tar.gz # cd qt-em bedded-linux-opensource-src-4.5.1 # ./configure -embedded x86 –qvfb // 我的编译情况是: ./confignre –prefix /work/Trolltech/QtEm bedded-4.5.1–no-o penssl # gmake # gmake install qt-em bedded 被安装在这个目录下/usr/local/Trolltech/QtEmbedded-4.5.1 设置环境变量: # vi ~/.bashrc 把下面的加上去 export QTEDIR=/usr/local/Trolltech/QtEm bedded-4.5.1 export PATH=/usr/local/Trolltech/QtEm bedded-4.5.1/bin:$PAT H export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEm bedded-4.5.1/lib:$LD_LIBRA RY_PATH

蓝牙协议栈BlueZ的移植与开发

蓝牙协议栈BlueZ的移植与开发* 欧阳鑫 于红岩 吕杨 (昆明理工大学信息工程与自动化学院,昆明,650051) 摘要:蓝牙技术是当前国内外科技界和产业界研究开发的热点技术,其应用范围包括手机、PDA、信息家电设备等领域,蓝牙技术在嵌入式系统上必将得到广泛的应用。而要在嵌入式系统上提供蓝牙开发支持,蓝牙协议栈的移植是关键。本文分析了蓝牙协议栈BlueZ体系结构,详细介绍了在S3C2410开发板上移植BlueZ的步骤,建立了嵌入式蓝牙应用开发平台,并提出了用BlueZ 开发蓝牙应用程序的思路。 关键字:蓝牙技术;蓝牙协议栈BlueZ;移植;S3C2410;Linux 中图分类号:TP368.1 文献标识码:A BlueZ Porting and Programming Ou Yangxin,Yu Hongyan,Lv Yang (College of Information Engineering and Automation,Kunming University of Science and Technology,Kunming 650051,China) Abstract: Bluetooth technology is the focused on by the domestic and overseas research institutes. This technology is widely used in mobile phone, PDA, and Information Appliance devices. In the future,bluetooth technology will be widely used in embedded system. Built some bluetooth applications on embedded system,the key technology is porting bluetooth protocol suites to platform. In this paper,we study the BlueZ architecture,describe the steps of Porting BlueZ to S3C2410 Platform in detail,and build the embedded bluetooth application programming platform. In the end, we also give the idea of bluetooth programming. Keywords: bluetooth technology,bluetooth protocol suites BlueZ,porting, S3C2410, Linux 1引言 蓝牙技术是一项低价格、低功耗的射频技术,它能使蓝牙设备实现近距离无线通信。由于蓝牙技术有广泛的应用前景,它已成为当前国内外科技界和产业界研究开发的热点技术。Linux 操作系统的开放的蓝牙协议栈主要包括IBM公司的BlueDrekar,Nokia公司的Affix, Axis公司的OpenBT和官方协议栈BlueZ[1]。BlueZ是公布在Internet上的免费蓝牙协议栈,由于它结构简单,应用方便,具有灵活、高效和模块化的特点且具有较强的兼容性,因此BlueZ已经成为Linux操作系统下的官方的蓝牙协议栈。 S3C2410x是三星公司推出的一款高性价比32位的RISC处理器,内含一个由ARM公司设计的ARM920T核,具有低功耗高性能的特点,适用于对价格及功耗敏感的场合。本文使用的S3C2410开发板主要包含以下部件:S3C2410x芯片,32MB Nor Flash,64MB SDRAM,IIC存储器接口,LCD控制器,UART接口,一个USB(Host)接口。 利用S3C2410开发板上的USB接口,可以外扩蓝牙适配器,但S3C2410开发板上没有实现蓝牙设备驱动。本文对蓝牙协议栈BlueZ进行分析,移植BlueZ到开发板上实现蓝牙设备驱动,提出了使用BlueZ开发蓝牙应用程序的基本思路。 *基金项目:云南省自然科学基金项目(2004F0024M)。

linux蓝牙驱动代码阅读笔记

导读: linux蓝牙驱动代码阅读笔记 转载时请注明出处和作者联系方式 作者联系方式:李先静 昨天看了一下介绍蓝牙协议文档,今天索性对照看了看kernel里的代码(bluez),这里记点笔记,还是继承了老毛病,只关注整体流程而忽略细节,先了解个大概,等真正需要时再仔细分析。 net/hci_core.c HCI在主机端的驱动主要是为上层提供一个统一的接口,让上层协议不依赖于具体硬件的实现。HCI在硬件中的固件与HCI在主机端的驱动通信方式有多种,比如像UART、USB 和PC Card等等。hci_core.c相当于一个框架,用于把各种具体通信方式胶合起来,并提供一些公共函数的实现。 hci_cmd_task是负责发送CMD的任务,它从hdev->cmd_q队列中取CMD,然后调用hci_send_frame把CMD发送出去,hci_send_frame又会调用实际的HCI驱动的send函数发送数据。 hci_rx_task是负责接收数据的任务,它从hdev->rx_q队列中取数据,然后根据数据的类型调用上层函数处理。数据包有三种类型: HCI_EVENT_PKT:用于处理一些通信事件,比如连接建立,连接断开,认证和加密等事件,这些事件控制协议状态的改变。 HCI_ACLDATA_PKT:异步非连接的数据包,通过hci_acldata_packet提交给上层的L2CAP协议处理(hci_proto[HCI_PROTO_L2CAP])。 HCI_SCODATA_PKT:同步面向连接的数据包,通过hci_scodata_packet提供给上层的SCO协议处理(hci_proto[HCI_PROTO_SCO])。 hci_tx_task是负责发送数据的任务,发送所有connection中的ACL和SCO数据,以及hdev->raw_q中的数据包。 HCI为上层提供的接口主要有: hci_send_sco:发送SCO数据包,把要发送的数据包放入connection的发送队列中,然后调度发送任务去发送。 hci_send_acl:发送ACL数据包,把要发送的数据包放入connection的发送队列中,然后调度发送任务去发送。 hci_send_cmd:发送命令数据,把要发送的数据包放入hdev->cmd_q队列中,然后调度命令发送任务去发送。 hci_register_proto/hci_unregister_proto:注册/注销上层协议,HCI会把接收到的数据转发给这些上层协议。 hci_register_dev/hci_unregister_dev: 注册/注销设备,HCI会把要发送的数据通过这些设备发送出去。 其它一些公共函数。 net/hci_conn.c 提供了一些连接管理,论证和加密的函数。 net/hci_event.c 事件处理函数,负责状态机的维护,这些事件通常会使连接从一个状态转换另一个状态。 hci_si_event:用于发送事件。 hci_event_packet:用于处理底层上报的事件,从hci_rx_task处调用过来。 net/hci_sock.c

Linux-Ubuntu 下 Qt 4.7.1静态编译

Qt的静态编译是本文介绍的内容,相比较来说windows的Qt静态编译比较容易,相反对于linux编译网上的文章实践下来都有这样那样的错误,这里简要小结一下自己的编译成果。 一、实验环境 1Ubuntu 10.04 2qt-x11-opensource-4.7.1.tar.gz 二、前期准备 在安装好Ubuntu 10.04后默认是没有安装程序编译软件包的,所以我们首先是要配置ubuntu。 配置方法:(推荐全程root用户模式) 1、首先调整网络设置使得机器可以上网(具体做法因人而异,这边就忽略不计) 2、需要配置的安装包:输入命令: 3apt-get install build-essential libpcap0.8-dev libx11-dev libfreetype6-dev 4libavahi-gobject-dev libSM-dev libXrender-dev libfontconfig-dev libXext-dev 三、静态编译Qt 1、下载qt-x11-opensource-4.7.1.tar.gz 2、解压缩qt-x11-opensource-4.7.1.tar.gz 3、配置path 输入命令: 5export PATH="$PATH:/usr/local/Trolltech/Qt-4.7.1/bin" 4、进入qt解压目录,配置configure命令:./configure -static -nomake demos

-nomake examples -nomake tools -no-exceptions 5、分别输入“o”和“y”以后进入编译阶段 6make 7make install 慢慢等吧…… 四、静态编译Qt程序 1、建立文件夹,然后写程序文件XX.cpp 2、qmake -project 3、生成pro文件后在里面加入CONFIG += static 4、qmake 5、生成Makefile后在cxxflags的=后插入-static 6、make 小结:实现Ubuntu 下Qt4.7.1静态编译的内容介绍完了,希望本篇的静态编译读你有所帮助。 【编辑推荐】 8Qt中根据不同版本号使用不同源码 9解析Qt资源文件使用 10深度解析QT 介绍跨平台界面库 11Windows下Qt 静态编译连接 12浅谈Qt 静态编译 原文参考:https://www.doczj.com/doc/c813176107.html,/symbian-270510.htm

bluez how to

Linux BlueZ Howto Bluetooth protocol stack for Linux Jan Beutel j.beutel@https://www.doczj.com/doc/c813176107.html,,Maksim Krasnyanskiy maxk@https://www.doczj.com/doc/c813176107.html, 14th November2001 1Introduction BlueZ is the of?cial Linux Bluetooth stack.It provides support for core Bluetooth layers and protocols. Bluez has many interesting features: Flexible,ef?cient and modular architecture Support for multiple Bluetooth devices Multithreaded data processing Hardware abstraction Standard socket interface to all layers Currently BlueZ consists of(see also?gure1): HCI Core HCI UART,USB and Virtual HCI device drivers L2CAP protocol module Con?guration and testing utilities 2Setting up BlueZ 2.1Obtaining BlueZ Y ou can download the BlueZ source from https://www.doczj.com/doc/c813176107.html,.There is also an up to date CVS tree available there.

【IT专家】Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确认 qmake

本文由我司收集整编,推荐下载,如有疑问,请与我司联系Qt程序发行Linux版,软件打包知识(patchelf 工具修改依赖库,确 认qmake 2017/06/02 449 patchelf 工具可以修改已编译运行程序的依赖库位置和指定库链接器 ?patchelf --set-rpath ?patchelf --set-interpreter ?通过这个工具https://github/probonopd/linuxdeployqt如果自己编译不了,也可以下载现成的 ?https://github/probonopd/linuxdeployqt/releases ?运行./linuxdeployqt-2-x86_64.AppImage ShanbayDict 并为成功,生成的lib目录下的so文件很少。 ?运行./linuxdeployqt-2-x86_64.AppImage ShanbayDict -appimage 也未成功,但lib 生成了很多so文件 ?使用patchelf --set-rpath /opt/Qt-5.7-static/lib/:./lib ShanbayDict 修改rpath后,ShanbayDict可以独立运行了,连同lib一起拷贝到新安装的Ubuntu 16.04系统中,也能运行了。 ?ldd ShanbayDict 显示,rpath已经指向./lib目录 ?patchelf可以通过sudo apt installpatchelf 安装 ?2017年2月24日 ?Qt 5.8编译的Qt程序 ?设置环境变量,确认qmake -v 是自己使用的Qt版本,如果不是,解决办法是: ?export PATH=/home/lieefu/Qt5.8.0/5.8/gcc_64/bin:$PATH ?创建qml目录,把/home/lieefu/Qt5.8.0/5.8/gcc_64/qml 目录下用到的模块复制过来,我的app用到了三个QtQuick、QtQuick.2、QtMultimedia。 ?增加plugin中platforminputcontexts 包括libfcitxplatforminputcontextplugin.so文

Linux蓝牙协议栈OpenBT及其应用程序开发

2003.10 电子设计应用  www.eaw.com.cn52 引言 Linux蓝牙协议栈主要有三个:OpenBT、BlueDrekar、BlueZ,其中OpenBT被认为在性价比上超过BlueDrekar和BlueZ,可运行于X86、ARM、MIPS、PowerPC等硬件平台,与任何2.x版本的Linux内核兼容,支持JAVA。本文介绍了OpenBT的 体系结构及其对互操作性的影响,并以客户机/服务器(C/S)实例说明如何在OpenBT上开发蓝牙应用程序。 OpenBT的体系结构 使用不同蓝牙协议栈的设备在通信时往往会遇到互操作性问题。开发者需要了解各种协议栈的体系 结构并考虑其差异。通过分析源 码,本文给出了如图1所示的OpenBT的体系结构。OpenBT包括HCI、L2CAP、SDP、SP、Networking、OpenBT Utility、后台 程序、内核接口8个模块,分别解释如下: * HCI模块由Driver、Transport子模块构成。Driver负责HCI命令、HCI事件和HCI数据接口;Transport提供USB、RS-232、UART的驱动。 * L2CAP模块由State Handle、Security子模块构成。State Handle负责运行L2CAP的状态机和数据的分段组装;Security负责L2CAP级别安全管理。 * SP模块由RFCOMM、串口仿真子模块组成。RFCOMM负责完成蓝牙RFCOMM协议中所描述的内容,核心是一个RFCOMM状态机;串口仿真负责提供接口。 * SDP模块负责完成蓝牙SDP协议中所描述的内容,在功能上分为XML文件管理、SDP查询处理和SDP响应处理三部分。 * Networking模块由PPP、Modem Emulation、TCS子模块构 Linux蓝牙协议栈OpenBT 及其应用程序开发 ■ 西安交通大学电信学院 马毅华 冯恩信 摘 要:本文分析了OpenBT软件体系结构,根据客户机/服务器模型的实例,介绍了OpenBT应用程 序的开发,并提出了一种实用的开发模式。 关键词:蓝牙技术;Linux;OpenBT

【IT专家】《Linux与Qt程序设计》知识框架

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 《Linux与Qt程序设计》知识框架 本文主要是通过一本书来大致了解Qt开发的框架,不对具体内容做详细分析。?1.首先弄清楚概念:定义- 以自己的话理解是什么- 实现的是什么功能- 用在哪些地方 ?2.前面认识到的知识点的特点- 代码实现- 工程代码分析 ?第一部分Linux基础知识第二部分Qt程序基础第5章OtCreator下载与安装5.1 QtCreator下载5.1.1 使用软件中心下载QtCreator5.1.2 访问Qt网站下载相关资源5.2 第一个Qt程序5.3 QtCreator介绍5.3.1 QtCreator界面介绍5.3.2 编译、调试、发布设置5.4 QtDesigner介绍第6章Qt基础6.1 Qt概述与特性6.1.1 Qt简介6.1.2 Qt特性 ?Qt SDK包括:Qt库、Qt Creator IDE、Qt工具:Qt Designer、Qt Linguist(消除国际化流程障碍)、Qt Assistant. ?6.2 Qt与Xll的关系6.2.1 什么是X116.2.2 Qt与Xl16.3 Qt与KDE的关系6.3.1 KDE简介6.3.2 Qt与KDE6.4 Qt库和组件 ?Qt SDK中主要包括类库、开发工具、平台相关支持、授权许可等。 ?其中类库包含了Qt的所有对外发布的功能组件: ?1)Core: Qt4的基本模块,定义了其他模块使用的Qt核心的非GUI类,所有其他模块都依赖于该模块。 ?2)GUI: 定义了图形用户界面类 ?3)WebKit:提供了一个在Qt中使用Web Browser的渲染与解析引擎。 ?4)Graphic View:提供的是一种Qt Model-View编程模式,既可以管理大数量的定制2D graphical items,又可以与它们交互,由于一个视图窗口可以把这些项绘制出来,并支持旋转与缩放。 ?5)Scripting:提供了对脚本(如:Java、Python、Perl、Ruby)的支持。 ?6)OpenGL ?7)XML: 定义了处理XML(eXtensible Markup Language)语言的类。

bluez 交叉编译--测试通过(参考了网上的教程,并做了修改)

bluez 交叉编译--测试通过(参考了网上的教程,并做了修改) arm-linux-gcc 4.3.3 ========================================== 我用到的几个库: bluez-lib-3.36.tar.gz expat-2.0.1.tar.gz dbus-1.2.16.tar.gz glib-2.22.4.tar.bz2 libusb-0.1.12.tar.gz bluez-utils-3.36.tar.gz ==================================================== /opt/libs 和/opt/utils是我自己编译时用的路径,你可以随便的选取。 1,编译安装bluez-lib-3.36.tar.gz 这个库不需要什么依赖,直接解压,配置,编译然后安装即可。 #tar zxvf bluez-lib-3.36.tar.gz #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC=arm-linux-gcc #make #make install 2,编译安装expat-2.0.1.tar.gz 这个库是后面的dbus依赖的,你也可以用libxml2来代替expat,官方网站上说dbus必须依赖于他们中的一个,我这里用的是expat-2.0.1.tar.gz。 #tar zxvf expat-2.0.1.tar.gz #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC=arm-linux-gcc #make #make install 3,编译安装dbus-1.2.16.tar.gz #tar zxvf dbus-1.2.16.tar.gz #echo ac_cv_have_abstract_sockets=yes>arm-linux.cache #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --cache-file=arm-linux.cache --with-x=no #make #make install ======================================================= 4,编译安装glib-2.22.4.tar.bz2 #tar -zxjf glib-2.22.4.tar.bz2 #echo ac_cv_type_long_long=yes>arm-linux.cache #echo glib_cv_stack_grows=no>>arm-linux.cache #echo glib_cv_uscore=no>>arm-linux.cache #echo c_cv_func_posix_getpwuid_r=yes>>arm-linux.cache #echo ac_cv_func_posix_getgrgid_r=yes>>

QT程序,如何在ARM板上运行

QT程序,如何在ARM板上运行写这篇文章,主要是为了说明怎么让PC机下编译好的QT程序移植到板子上运行。在说明之前,我们要了解一个事情,就是QT。QT是一个跨平台的开发工具,具有很好的移植性,它所依赖的库文件在PC机上和在ARM上是不一样的,那么我要怎么做呢? 很简单,就是重新编译已经写好的QT程序。为什么需要重新编译,第一,ARM的CPU的指令集和PC的CPU指令集肯定是不一样的,也就是需要交叉编译。第二:由于QT所依赖的库文件不一样,在不同的指令集得CPU里,库是需要移植的。我这里假设ARM板的文件系统里已经移植好了QT相关的库文件(具体怎么移植,我会再写一篇文章),移植好后,在开发板上就可以移植QT程序了。 那么,具体我要怎么编译呢?我们都知道,编译好的QT的程序,一般会有几个.CPP\.h文件,这么多的文件我们要怎么样编译。首先,我们需要安装QT版本的库,一定要注意,这个库文件一定和开发板上的是同一个库。我们假设这个库名字叫qtembed450-arm。以下步骤一定要注意: 1.安装目录一定要在“/usr/local/”下; 2.安装成功后,这步非常关键,一定要设置环境变量,而且,我们要设置三个环境变量,这样做有三个目的:①可以在任何路径下用库里的命令②编译时候可以指定编译规则为 arm-linux-g++③编译时候可以指定到所需要的库文件。那么安装后,输入一下命令:gedit /root/.bashrc.这个命令执行后就进入到设置环境变量的地方,我们要加入以下三个环境变量的设置: export PATH=$PATH:/usr/local/qtembed450-arm/bin export LD_LIBRARY_PATH=$LD_LTBRARY_PATH:/usr/local/qtembed450-arm/lib export QMAKESPEC=/usr/local/qtembed450-arm/mkspecs/default 以上设置非常的重要,非常的关键。呵呵,先照着设置,具体原因我会细谈。注意,我编译用的很重要的qmake-arm 命令,就在/usr/local/qtembed450-arm/bin下,可以打开看看哦!环境变量设置好后,用which qmake-arm 命令来确认下是否成功,呵呵。 3.准备工作做到这里,算是进行一半了,哎,真累啊!还要接着写呢。接下来我们要把我们的编译好的QT程序的文件夹打开,把里面的 .CPP/.h文件拷贝出来,新建立一个文件夹; 4.把以上的文件里的.cpp .h文件复制后新建立一个文件夹。 5.新文件夹建立后,在linux终端中进入到该文件夹所在目录下,执行这个命令:qmake-arm -project命令,千万注意,-project 和arm之间一定要有空格啊!该命令执行后,会生成一个.pro文件,紧接着呢,执行qmake-arm命令,该命令执行后呢,会生成一个Makefile文件,这步很关键哦,没有这步就不会有Makefile文件,一般在这步会出现很多错误,就是库没有发现之类,这个时候,一定要检查前面的步骤,仔细检查看是否是错误。我们这个时候打开Makefile文件看一下,会发现,里面的编译已经变成 arm-linux-g++。这个时候,就踏实,接下来怎么办?还用问吗,直接make下就好了,哈哈,简单吧!看到上面的qtmyjpg文件了吗?这个是可以在开发板上运行的哦!接下来

linux 蓝牙编程 bluez

linux蓝牙编程bluez 收藏 从别的地方转了一篇蓝牙编程的,感觉比较详细,接下来自己慢慢验证一下。 实战Linux Bluetooth编程 实战Linux Bluetooth编程(一)协议栈概述 前言:随着嵌入式系统的飞速发展,很多嵌入式平台上需要Bluetooth设备和应用。但在Linux 下如何对 Bluetooth编程,一直没有一份很好的中文文档。Sam结合自己的工作,一步一步将一些有用的东西记录下来 ,希望对其它Linux下Bluetooth编程的朋友有点帮助。 一:Bluetooth基本概念: Bluetooth是爱立信、诺基亚、东芝、IBM和Intel 5家公司在1998年联合推出的一项无线网络技术。其宗旨 是提供一种短距离、低成本的无线传输应用技术。在行业协会筹备阶段,需要一个极具有表现力的名字来命 名这项高新技术。行业组织人员,在经过一夜关于欧洲历史和未来无限技术发展的讨论后,有些人认为用 Blatand国王的名字命名再合适不过了。Blatand国王将现在的挪威,瑞典和丹麦统一起来;就如同这项即将 面世的技术,将标准不一的短距离无线传输技术统一起来。 Intel负责半导体芯片和传输软件的开发,爱立信负责无线射频和移动电话软件的开发,IBM 和东芝负责笔记 本电脑接口规格的开发。 蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、 甚至家用电器采用无线方式联接起来。它的传输距离为10cm~10m,如果增加功率或是加上某些外设便可达 到100m的传输距离。它采用2.4GHz ISM频段和调频、跳频技术,使用权向纠错编码、ARQ、TDD和基带协议。

01.linux下搭建opencv并在qt中使用

linux下搭建opencv并在qt中使用 作者:vmezr 由于最近要着手做pcduino上的视频聊天的项目,从未接触过pcduino,经过讨论决定使用qt来实现。其实qt和opencv 我都没有接触过,也打算趁机学习一下。言归正传,首先得搭建好需要的环境,第一步是安装配置opencv,然后在qt中使用opencv的库。 (opencv的安装方法部分参考雷雨同鞋哒~) 首先,在官网https://www.doczj.com/doc/c813176107.html,/中下载opencv原码,选择linux版本进行下载。 以opencv2.4.8为例:(我用的是opencv2.4.13) 1.将压缩包解压到/usr/local/ 2.直接使用sudo apt-get install cmake下载并安装cmake 3.为了方便后续摄像头捕捉等功能还需要下载opencv依赖的一些包: apt-cache search opencv 使用此命令可以直接查到需要下载的依赖包 leo@leo-virtual-machine:/usr/local/opencv/release$ apt-cache search opencv libcv-dev - Translation package for libcv-dev libcv2.3 - computer vision library - libcv* translation package libcvaux-dev - Translation package for libcvaux-dev libcvaux2.3 - computer vision library - libcvaux translation package libhighgui-dev - Translation package for libhighgui-dev libhighgui2.3 - computer vision library - libhighgui translation package libopencv-calib3d-dev - development files for libopencv-calib3d libopencv-calib3d2.3 - computer vision Camera Calibration library

bluez编译移植

Dbus移植步骤 1.进入dbus的目录运行./configure --host=arm-linux --prefix=/bluetooth/dbus 2.出现错误can not run test program while cross compiling [mystic@moolenaar]$ . checking for getpeereid... no checking abstract socket namespace... configure: error: cannot run test program while cross compiling See `config.log' for more details. 执行./configure时要在宿主系统中运行一些测试程序,因为是交叉编译所以这个测试是一定通不过的。不过没问题,我们可以在configure 时指定cache-file文件来屏障掉测试程序,在下面编译glib包时会遇到同样的问题。 处理方法: 在源码包根目录下执行 [mystic@moolenaar]$ echo ac_cv_have_abstract_sockets=yes > arm-linux.cache 或者自己新建一个文件,vim arm-linux.cache 在里面输入:ac_cv_have_abstract_sockets=yes

[mystic@moolenaar]$ ./configure --host=arm-linux --prefix=/bluetooth/dbus --cache-file=arm-linux.cache 参数解释:--prefix指定编译好的文件存放的路径,默认会放到/usr/bin 下 --host 指定编译器的类型,这里指定为arm-linux交叉编 译,默认是本机的gcc编译 --cache 指定测试的信息写的地方,这里是写到了 arm-linux.cache里面 一会会提示缺少xml库,下载libxlm2,解压后: ./configure –-prefix=/bluetooth/libxml –-host=arm-linux make ->make install 编译完成后一定要检查libxml/lib下的库文件的格式是否是ARM的,否则不能用。查看的方式是file libxml.so.2.6.so(库名),出现ARM 表示是交叉编译的,出现i686等信息表示是本机编译的。 2. 编译dbus,cannot find -lX11 [mystic@moolenaar]$ make arm-linux/bin/ld: cannot find -lX11 collect2: ld returned 1 exit status make[2]: *** [dbus-launch] error 1 make[2]: Leaving directory `/3.3.2/dbus-1.0.2/tools'

Linux下用QT进行软件开发的流程

Linux下用QT进行软件开发的流程 QT 2009-11-20 17:09:49 阅读69 评论0 字号:大中小 1.用QT Designer开发非GUI的C/C++软件 1)建立工程:双击上图中的C++ Project; 2)新建源程序并添加到工程中:新建hello.cpp后会自动加入到工程, hello.cpp如下: #include using namespace std; int main() { cout<<"Hello! this program is created by QT Designer !"<

DHCP客户端程序移植笔记(全)

DHCP程序运行与调试 实现的目标: 开机时自动获取IP地址,若没有可用的IP地址,选用autoip;或者选用静态配置的ip 地址。 DHCP客户端程序有多种,本系统选用的busybox下的dhcpc。 [1]修改内核配置;在内核中添加以下选项: Networking ---> [*] Networking support Networking options---> <* > Packet socket //添加.配置CONFIG_PACKET [ * ] IP: DHCP support //添加 [ * ] Network packet filtering (replaces ipchains)---> //添加,后面子选项可不选,配置CONFIG_NETFILTER ?--- Network packet filtering framework (Netfilter) 说明:若没选<* > Packet socket, [ * ] Network packet filtering (replaces ipchains)--->选项,在执行udhcpc命令时出现如下错误: ~ # udhcpc udhcpc (v-pre) started udhcpc[208]: udhcpc (v-pre) started FATAL: couldn't listen on socket, Address family not supported by protocol udhcpc[208]: FATAL: couldn't listen on socket, Address family not supported by protocol [2]修改busybox配置,Busybox中添加以下选项: Networking Utilities ---> udhcp Server/Client ---> [] udhcp Server (udhcpd) //在此不作服务端,故不选。生成udhcpd命令 [*] udhcp Client (udhcpc)//生成udhcpc命令 [ ] Lease display utility (dumpleases) [ ] Log udhcp messages to syslog (instead of stdout) [ ] Compile udhcp with noisy debugging messages 若busybox没编译相应选项,也可从网上下载相应文件,用arm-linux交叉编译得到udhcpd,udhcpc命令copy到usr/sbin下就可以了。 我从网上下的udhcp_cvs20050303.orig.tar.gz文件 解压后修改Makefile文件 在19行添加CROSS_COMPILE=arm-linux- 注释12行的COMBINED_BINARY=1,否则不生成udhcpc命令 [3]运行程序: up-tech:/sbin #./udhcpc udhcpc (v1.15.3) started Sending discover... Sending select for 192.168.1.102...

相关主题
文本预览
相关文档 最新文档