这个是IPv6的地址,本来IPV6的地址的表示格式就是分号分隔的16进制字符串,说起来是没必要变成点分十进制的,也没有程序认。
你用protocol()方法检查是否等于QAbstractSocket::IPv4Protocol
QList<QNetworkInterface>InterfaceIpList=QNetworkInterface::allInterfaces();
for(inti=0;i<InterfaceIpListlength();i++)
{
if(InterfaceIpList[i]isValid())
{
foreach(QNetworkAddressEntry addressE , InterfaceIpList[i]addressEntries() )
{
if(addressEip()protocol()==QAbstractSocket::IPv4Protocol
&&addressEbroadcast()!=QHostAddress::Null)
{
NetInterfaceList<<addressEip()toString();
}
}
}
}
注意以上不包括回环地址127001和通配地址:0000
还有一个简单的方法:
QList<QHostAddress> InterfaceIpList=QNetworkInterface::allAddresses () ;
for(int i=0;i<InterfaceIpListlength();i++)
{
if(InterfaceIpList[i]protocol()==QAbstractSocket::IPv4Protocol)
{
NetInterfaceList<<InterfaceIpList[i]toString();
}
}
这个会包含非有效IP:即未连接的网卡缓存的IP地址,这个可能和系统有关。
你如果用hostinfo也得检查是否有效和过滤IP类型。
#include
#include
#include
#include
#define MaxQSize 80
float qlist[MaxQSize],qlist1[MaxQSize],qlist2[MaxQSize]; //定义三个全局队列
int front=0,rear=0,front1=0,front2=0,rear1=0,rear2=0,count=0,count1=0,count2=0;//定义三个队列头结点、尾结点、数据个数
main()
{
char c[80];
void Enter(float),pop(),ClearStack();
printf("input string:(n:sin,o:cos,s:sqrt)\n");
while(gets(c),c!='q' ||c!='Q')
{
switch(c)
{
case '+':
case '':
case 's':
case 'n': //求SIN
case 'o': //求COS
case '/': //将符号入第一个队列
{
if(count==MaxQSize)
{
printf("Quere overflow!");
exit(1);
}
count++;
qlist[rear]=c;
rear=(rear+1)%MaxQSize;
break;}
case '-':
{
if(strlen(c)>1) //如果是负号,则将负号和数一起入第二个队列
Enter(atof(c));
else //否则,说明是减号,入第一队列
if(count==MaxQSize)
{
printf("Quere overflow!");
exit(1);
}
count++;
qlist[rear]=c;
rear=(rear+1)%MaxQSize;
break;}
case '=':
pop(); //显示结果
break;
case 'c':
ClearStack();
break;
case 'q':
ClearStack();
exit(1);
default:
Enter(atof(c));
break;
}
}
return 0;
}
void Enter(float num) //将数据入第二个队列
{
if(count1==MaxQSize)
{
printf("Queue overflow!\n");
exit(1);
}
count1++;
qlist1[rear1]=num;
rear1=(rear1+1)%MaxQSize;
}
void ClearStack() //将三个队列清空
{
count=0;
count1=0;
count2=0;
front=0;
rear=0;
front1=0;
rear1=0;
front2=0;
rear2=0;
}
void pop() //显示结果
{
float QFront(float num1,float num2,char temp);
float num1,num2;
float sum;
char temp;
temp=qlist[front]; //将第一个队列中的头结点读出来
while(count1!=0) //判断第二个队列是否有数
{
temp=qlist[front]; //将队列中头结点读出来
sum=QFront(num1,num2,&temp);
count--;
front=(front+1)%MaxQSize;//将第一个队列头指针加1
}
if(count!=0 && temp=='s')
sum=sqrt(qlist2[front2]);
if(count!=0 && temp=='n')
sum=sin(qlist2[front2]);
if(count!=0 && temp=='o')
sum=cos(qlist2[front2]);
printf("%f",sum);
}
float QFront(float num1,float num2,char temp)
{
float number,numb1;
float QFront1();
void QInsert(float);
num1=QFront1(); //先读出一个数
switch(temp)
{
case '+':
if(count2==0)
{
num2=QFront1();//读出第二个数
number=num1+num2;
QInsert(number);//将结果存入第三个队列
}
else
{
number=num1+qlist2[front2];
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;
case '-':
if(count2==0)
{
num2=QFront1();
number=num1-num2;
printf("number=%f\n",number);
QInsert(number);
}
else
{
number=qlist2[front2]-num1;
printf("number=%f\n",number);
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;
case '':
if(count2==0) //如果第三个队列中没有数据,则从第二个队列中读出一个数据
{
num2=QFront1();
number=num1num2;
QInsert(number);
}
else //否则,从第三个队列中读出数据
{
number=qlist2[front2]num1;
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;
case '/':
if(count2==0)
{
num2=QFront1();
if(num2==0)
{
printf("divied by 0");
ClearStack();
exit(1);
}
else
{
number=num1/num2;
QInsert(number);
}
}
else
{
if(num1==0)
{
printf("divide by 0");
ClearStack();
exit(1);
}
else
{
number=qlist2[front2]/num1;
front2=(front2+1)%MaxQSize;
QInsert(number);
}
}
break;
case 's':
if(count2==0)
{
number=sqrt(num1);
QInsert(number);
}
else
{
number=sqrt(qlist2[front2]);
printf("number=%d\n",number);
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;
case 'n':
if(count2==0)
{
number=sin(num1);
QInsert(number);
}
else
{
number=sin(qlist2[front2]);
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;
case 'o':
if(count2==0)
{
number=cos(num1);
printf("number=%d\n",number);
QInsert(number);
}
else
{
number=cos(qlist2[front2]);
printf("number=%d\n",number);
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;
}
return number;
}
float QFront1() //从第一个数据读数据
{
float temp;
if(count1==0)
{
printf("Deleting from an empty queue!\n");
exit(1);
}
temp=qlist1[front1];
count1--;
front1=(front1+1)%MaxQSize;
return temp;
}
void QInsert(float number) //将结果存入第三个队列
{
if(count2==MaxQSize)
{
printf("Queue overflow!\n");
exit(1);
}
count2++;
qlist2[rear2]=number;
rear2=(rear2+1)%MaxQSize;
}
其实这个程序用链表实现更好,但是由于时间关系,所以用了数组。当然,这个程序还不是很完善,还有很多地方需要改进,比如可以用图形界面来进行 *** 作、可以将三个队列放入一个结构体中等。
不是计算是获取吧都显示出来了怎么还在计算呢
View view = listviewgetFirstVisiblePosition();
viewgetLayoutParams()getheight();
不过按照你的需求,应该是在listViewsetOnScrollListener();
listViewsetOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
View view = listViewgetChildAt(firstVisibleItem);
if(view是视频){
//播放
}
}
});
不过这样应该会很卡,性能上不太好,你可以先试试
以上就是关于windows下用qt获取本地IP地址,显示的格式好像是16进制的,如何转换成10进制全部的内容,包括:windows下用qt获取本地IP地址,显示的格式好像是16进制的,如何转换成10进制、用C语言设计一个简单的计算器、求助,如何给QListView的条目设置间距等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)