我从论坛下了一个qtopia应用upd代码,并做了修改,原先是有两个button(send,recv);分别和两个插槽(sendslot,和recvslot)相连,那样一端按下send发送,令一端必须要按下recv才能接受;
我想把它改成像qq那样,一端按send发送,另一端自动显示,不过还是两个button(一个send,一个exit),改了*.ui和*.cpp,编译通过后,运行
#source /opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv
#qvfb -width 640 -height 480 &
#./template -qws
不能运行,没有界面出来,我还是菜鸟,把代码贴出来,希望大家帮忙看看:
/**********************************************************
Author : Lan Xin ,
xinlan_al@yahoo.com//-------------------------------------------------------------------------
#include "template.h"
#include <qlabel.h>
#include <qpushbutton.h>
#include <qpixmap.h>
//#include <qgroupbox.h>
//#include <qtimer.h>
#include <qstring.h>
//#include <qlcdnumber.h>
#include <qlineedit.h>
//#include <qtimer.h>
//-------------------headers of hardware driver-----------------
#include <unistd.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>
//==============================================================
//----------------Constructor & Destructor Function-------------
MyHelloForm::MyHelloForm( QWidget* parent, const char* name, WFlags fl)
:HelloBaseForm(parent, name, fl)
{
strDestIP="192.168.1.108";//192.168.1.230
strSrcIP ="192.168.1.230";//192.168.1.108
eddy = new QPixmap("/opt/Qtopia/pics/yana3.JPG");
connect(UdpSendPushButton,SIGNAL(clicked()),this,SLOT(UdpSend()));
connect(UdpExitPushButton,SIGNAL(clicked()),this,SLOT(UdpExit()));
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd<0){
printf("socket creating err in udptalk\n");
exit(1);
}
//-------------------------------------------------------------------
socklen = sizeof(struct sockaddr_in);
memset(&peeraddr, 0, socklen);
peeraddr.sin_family=AF_INET;
peeraddr.sin_port=htons(2000);
if(inet_pton(AF_INET, strDestIP, &peeraddr.sin_addr)<=0){
printf("Wrong dest IP address!\n");
exit(0);
PixmapLabel1->setText( "aae" );
}
//-------------------------------------------------------------------
memset(&localaddr, 0, socklen);
localaddr.sin_family=AF_INET;
if(inet_pton(AF_INET, strSrcIP, &localaddr.sin_addr)<=0){
printf("Wrong source IP address!\n");
exit(0);
PixmapLabel1->setText( "aae" );
}
localaddr.sin_port=htons(2000);
//-------------------------------------------------------------------
//===================================================================
if(bind(sockfd, (struct sockaddr*)&localaddr, socklen)<0){
printf("bind local address err in al udptalk!\n");
PixmapLabel1->setText( "bind local address err in al udptalk!\n" );
exit(2);
}
/*recv message loop*/
while(1){
char recmsg[BUFLEN+1] = {0}; //初始化为0
recvfrom(sockfd, recmsg, BUFLEN, 0, (struct sockaddr*)&peeraddr, (socklen_t*)&socklen);
printf("peer:%s", recmsg);
PixmapLabel1->clear();
PixmapLabel1->setText( recmsg );
}
}
MyHelloForm::~MyHelloForm()
{
close(sockfd);
}
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//---------------------User defined function--------------------
void MyHelloForm::UdpSend()
{
PixmapLabel1->clear();
PixmapLabel1->setFrameStyle( QFrame::Panel | QFrame::Sunken );
PixmapLabel1->setText( "UDP is sending Message" );
PixmapLabel1->setAlignment( AlignCenter );
strBuffer=LineEdit->text();
if(sendto(sockfd, strBuffer, strlen(strBuffer), 0, (struct sockaddr*)&peeraddr, socklen)<0){
printf("sendto err in udptalk!\n");
PixmapLabel1->setText( "sendto err in udptalk!\n" );
exit(3);
}
}
void MyHelloForm::UdpExit()
{
close(sockfd);
}