毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 计算机安全 >> 正文

基于QT的GUI设计 第9页

更新时间:2014-6-28:  来源:毕业论文

基于QT的GUI设计 第9页
通过创建按钮来连接信号和槽:    connect(PushButtonCreate,SIGNAL(clicked()),this,SLOT(slotCreateServer()));
其中槽slotCreateServer内容为:
Port=8010;
server = new Server(this,port); //创建server的对象,port为端口号;
connect(server,SIGNAL(updateServer(QString,int)),this,SLOT(updateServer(QString,int)));
槽updateServer(QString,int)内容包括:
ListWidgetContent->addItem (msg.left(length) );//给ListWidgetContent聊天内容显示窗口添加内容
Server接收用户登陆连接信号:
void Server::incomingConnection(int socketDescriptor)
{
 TcpClientSocket *tcpClientSocket = new TcpClientSocket(this);
//创建Tcp客户套接字
 connect(tcpClientSocket,SIGNAL(updateClients(QString,int)),this,SLOT(updateClients(QString,int)));//更新显示客户端发送的聊天内容;
 connect(tcpClientSocket,SIGNAL(disconnected(int)),this,SLOT(slotDisconnected(int)));//当用户端断开连接时触发的信号和槽,对于断开连接的主要实现利用tcpClientSocketList.removeAt(i);
tcpClientSocket->setSocketDescriptor(socketDescriptor);//调用QT内部API设置tcp相关描述信息;
 tcpClientSocketList.append(tcpClientSocket);//添加用户到用户列表;
}
Server接收客户端聊天数据:
void TcpClientSocket::dataReceived()
{
    while (bytesAvailable()>0)
    {
   char buf[1024];  //声明字符串buf;
   int length=bytesAvailable();
   read(buf, length);//读取buf中字符内容;
      QString msg=buf;//将读取的内容赋给msg信号内容
      emit updateClients(msg,length);// 更新显示客户端聊天数据;
    } 

4.7.2 客户端设计
本客户端由由一个Qwidget组成,其中包括背景label,聊天内容显示ListWidgetContent,聊天内容编辑栏LineEditSend,端口编辑LineEditPort, IP编辑栏LineEditServerIP,连接进入按钮PushButtonEnter,发送聊天内容按钮PushButtonSend等。
其中主要的信号和槽有:
connect(PushButtonEnter,SIGNAL(clicked()),this,SLOT(slotEnter()));
connect(PushButtonSend,SIGNAL(clicked()),this,SLOT(slotSend()));
槽slotEnter()有以下内容:
QString ip=LineEditServerIP->text();//将IP编辑栏的内容赋值给ip;
userName=LineEditUser->text();//将用户名编辑栏内容赋值给usrname;
tcpSocket = new QTcpSocket(this);//创建一个tcp套接字对象,即新用户;
connect(tcpSocket,SIGNAL(connected()),this,SLOT(slotConnected())); //用户连接的信号和槽;
connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(slotDisconnected()));//用户断开连接的信号和槽;
connect(tcpSocket, SIGNAL(readyRead()),this, SLOT(dataReceived()));//数据发送的的信号和槽;
tcpSocket->connectToHost ( *serverIP, port);//根据IP和端口号连接到服务端;
client客户端数据接收:
void TcpClient::dataReceived()
{
    while (tcpSocket->bytesAvailable()>0)
    {
   QByteArray datagram; //声明一个字节数组;
     datagram.resize(tcpSocket->bytesAvailable());//设置字节数datagram的范围大小;
   QHostAddress sender;//
   tcpSocket->read(datagram.data(), datagram.size());
//读取字节数组的数据;
  QString msg=datagram.data();//将数据赋值给msg,此处与服务端的msg等价;
  ListWidgetContent->addItem (msg.left(datagram.size()));//添加msg内容到ListWidgetContent聊天显示栏;
    }
}
4.8 Tslib与触摸屏
4.8.1 触摸屏原理
触摸屏按其工作原理的不同分为表面声波屏、电容屏、电阻屏和红外屏几种。常见的又数电阻触摸屏。如图所示,电阻触摸屏的屏体部分是一块与显示器表面非常配合的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。
图4-8 触摸屏的结构图
如下图所示,当手指或笔触摸屏幕时(图c),平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层(顶层)接通X 轴方向的5V 均匀电压场(图a),使得检测层(底层)的电压由零变为非零,控制器侦测到这个接通后,进行A/D 转换,并将得到的电压值与5V 相比即可得触摸点的X 轴坐标为(原点在靠近接地点的那端):
Xi=Lx*Vi / V(即分压原理)
同理得出Y 轴的坐标,这就是所有电阻触摸屏共同的最基本原理。

图4-9  触摸屏坐标识别原理图

本开发触摸屏是基于UCB1400的芯片,UCB1400是一款特殊的芯片,其主要功能是用作立体式音频解码器,另外它还有触摸屏接
口和电源管理接口。在我们的开发板上主要用作Xscale AC 处理单元的接口电路和触摸屏的数模转换电路。触摸屏接口可直接连接四线制触摸屏。其内建10 位A/D 转换,提供读取触摸屏和电源管理参数的能力。10 个通用I/O 引脚可向系统提供可编程输入输出。
4.8.2 Tslib 1.4的编译
1.先解压tslib-1.4.tar.gz包。
2.指定交叉编译工具$export CC=arm-linux-gcc
3.配置./configure --host=arm-linux --prefix=/TsLib1.4
4.编译TsLib:  Make和 make install
5.由此可得经过交叉编译的TsLib1.4
4.8.3 TsLib的相关配置
1.把编译出TsLib上的/bin, /etc, /lib 目录下的文件都拷贝到开发板下。建立目录/mnt/yaffs/Lian/tslib1.4
2.打开/mnt/yaffs/Lian/tslib1.4/etc/ts.conf文件,删去该文件下的所有内容后加入一下内容:
#module_raw input                                                              
module pthres pmin=1                                                           
module variance delta=30                                                       
module dejitter delta=100                                                      
module linearmodule linear
3.设置tslib环境变量:
export V_ROOT=/mnt/yaffs/Lian/tslib1.4       //tslib1.4目录                                   
export TSLIB_CONSOLEDEVICE=none      //none默认是/dev/tty                                          
export TSLIB_FBDEVICE=/dev/fb0         // framebuffer设备文件                                        
export TSLIB_TSDEVICE=/dev/touchpanel      //触摸屏设备节点                                    
export TSLIB_CALIBFILE=$V_ROOT/etc/pointercal
//指定触摸屏校准文件pintercal的存放位置                                 
export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf    //tslib模块配置文件                                  
export TSLIB_PLUGINDIR=$V_ROOT/lib/ts   //tslib插件库目录                                       
export QWS_MOUSE_PROTO=Tslib:/dev/touchpanel //触摸屏设备文件                                   
export LD_LIBRARY_PATH=/tmp:$V_ROOT/lib:$LD_LIBRARY_PATH //库文件目录
4.运行/mnt/yaffs/Lian/tslib1.4/bin/ts_calibrate获得校准文件/etc/pointercal;再运行./mnt/yaffs/Lian/tslib1.4/bin/ts_test检测一下校正结果,如果touch的时候,十字光标随着你移动,基本成功了。至此 Tslib可以测试通过,此后在此环境变量下所运行的QT程序都可以利用触摸屏。
4.9 本章小结
本章详述了每个软件模块的详细设计,包括主界面的设计,Mplayer在QT中的调用,Webkit引擎的调用和实现,介绍了QT的绘图设备,自定义风格的设计,同时也详述了每个模块的GUI设计以及模块中所用到的类和实现方法。此外,还介绍了基于Tslib的触摸屏实现和触摸屏的相关配置等。
5 交叉编译与环境配置
5.1 Linux内核裁剪与烧写
本系统使用Linux2.6内核,要进行内核裁剪,进入内核目录后输入命令:
 make gconfig 或make menuconfig
 裁剪内核添加相关驱动:
 1. 使目标平台上能够使用usb鼠标,选择、修改如下:
    Mmc support
    选中 mmc block device driver
    选中 intel pxa270 multimedia interface support
 2. 使得目标平台上能够使用usb鼠标,修改如下:
USB support  
EHCI HCD(去掉)
USB Mass Storage Write-Protected Media Detection (EXPERIMENTAL)(去掉)
Datafab Compact Flash Reader support (EXPERIMENTAL)(去掉)
Aiptek 6000U/8000U tablet support(选上)
Wacom Intuos/Graphire tablet support(选上)
Microtek X6USB scanner support(选上)
USB OV511 Camera support(去掉)
USB Serial Converter support(选上)
HID input layer support(选上)

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

基于QT的GUI设计 第9页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。