如题,我写了一个程序。可是编译完全正确,但是一运行就无响应。
我一行一行代码试过,问题出现在start函数里的while 只要把这个注释掉就可以了,但是这个是主要部分。
不知道该怎样改?
代码如下:
//-------------------.h-------------------
//---------homework.h------------
#ifndef HOMEWORK_H
#define HOMEWORK_H
#include<qlabel.h>
#include<qpushbutton.h>
#include<qhbox.h>
#include<qstring.h>
#include<qlist.h>
#include<qstyle.h>
//----全局函数---------------------
int comp(const char *a,const char *b);
int random(int n);
typedef int(*QSORT_UDF)(const void *,const void *);
void start1();
//---------------------------------------------
class HomeWork:public QLabel
{
Q_OBJECT
private:
QHBox *hbox1,*hbox2,*hbox3; //用来管理13张牌即13个Label
QList<QPushButton>list1;//list1中放三个按钮
QList<QLabel> list2;//list2中放12张牌
public slots:
void start();//点击按钮1开始
//void restart();//点击按钮2重新发牌
//void cheat();//点击按钮3查看别人的牌
public:
HomeWork(QWidget *parent,const char *name);
};
#endif
//---------------------------.cpp---------------------
//----------------homework1.cpp----------------
#include"homework.h"
HomeWork::HomeWork(QWidget *parent,const char *name):QLabel(parent,name)
{
list1.insert(0,new QPushButton("开始发牌",this,"btn1"));//在按下“开始发牌”前的界面,只有一个按钮“开始发牌”
list1.at(0)->setGeometry(260,280,80,40);
connect(list1.at(0),SIGNAL(clicked()),this,SLOT(start()));//用槽将"开始发牌"与start函数连接
hbox1=new QHBox(this);//用来管理13张牌
hbox1->setGeometry(0,0,600,200);
hbox1->hide();//第一个界面只显示“开始发牌”一个按钮,所以其他的都隐藏了,第二个界面出现
hbox2=new QHBox(this);//用来管理13张牌
hbox2->setGeometry(0,200,600,200);
hbox2->hide();
hbox3=new QHBox(this);//用来管理13张牌
hbox3->setGeometry(0,400,600,200);
hbox3->hide();
list1.insert(1,new QPushButton("牌太烂了,我要重新发牌",this,"btn2"));//点击此按钮对应restart函数
list1.at(1)->hide();
list1.insert(2,new QPushButton("使用作弊器,查看别人的牌",this,"btn2"));//点击此按钮对应cheat函数
list1.at(2)->hide();
for(int i=0;i<4;i++)//动态生成13个LABEL用来放牌
{
list2.insert(i,new QLabel(" ",hbox1));//调用QList 的insert函数
list2.at(i)->hide();
}
for(int i=4;i<8;i++)//动态生成13个LABEL用来放牌
{
list2.insert(i,new QLabel(" ",hbox2));//调用QList 的insert函数
list2.at(i)->hide();
}
for(int i=8;i<13;i++)//动态生成13个LABEL用来放牌
{
list2.insert(i,new QLabel(" ",hbox3));//调用QList 的insert函数
list2.at(i)->hide();
}
}
void HomeWork::start()
{
list1.at(0)->hide();//按下开始发牌后,按钮开始发牌消失,出现另外两个按钮
// start1();//调用start1函数进行发牌
char n[]={'2','3','4','5','6','7','8','9','T','J','Q','K','A'};
int a[53],b1[13],b2[13],b3[13],b4[13];
int b11=0,b22=0,b33=0,b44=0,t=1,m,flag,i;
while(t<=52){ //控制发52张牌
m=random(52); //产生0到51之间的随机数
for(flag=1,i=1;i<=t&&flag;i++)//查找新产生的随机数是否已经存在
if(m==a)flag=0; //flag=1:产生的是新的随机数
//flag=0:产生的随机数已经存在
if(flag){
a[t++]=m;//如果产生了新的随机数,则存入数组
if(t%4==0)b1[b11++]=a[t-1];//根据t的模值判断当前的牌应存入哪个数组中
else if(t%4==1)b2[b22++]=a[t-1];
else if(t%4==2)b3[b33++]=a[t-1];
else if(t%4==3)b4[b44++]=a[t-1];
}
}
qsort(b1,13,sizeof(int),(QSORT_UDF)comp); //将每个人的牌进行排序
qsort(b2,13,sizeof(int),(QSORT_UDF)comp);
qsort(b3,13,sizeof(int),(QSORT_UDF)comp);
qsort(b4,13,sizeof(int),(QSORT_UDF)comp);
hbox1->show();
hbox2->show();
hbox3->show(); //把牌放进label,等待显示
for(int j=0;j<13;j++)//将数组中的值转换为相应的花色
{
if(b1[j]/13==0)
list2.at(j)->setPixmap(QPixmap("images/heit.jpg"));//打印黑桃标记
else if(b1[j]/13==1)
list2.at(j)->setPixmap(QPixmap("images/ht.jpg"));//打印红桃标记
else if(b1[j]/13==2)
list2.at(j)->setPixmap(QPixmap("images/mh.jpg"));//打印梅花标记
else
list2.at(j)->setPixmap(QPixmap("images/fk.jpg"));//打印方块标记
list2.at(j)->setText(QString::number(n[b1[j]%13]));
list2.at(j)->show();//显示13张牌
}
list1.at(1)->show();//显示第二个按钮,即重新开始发牌按钮
list1.at(1)->setGeometry(200,450,200,50);
list1.at(2)->show();//显示第三个按钮,即查看别人的牌按钮
list1.at(2)->setGeometry(200,550,200,50);
}
//void start1()//该函数发牌存入数组
//{
//}
int comp(const char *a,const char *b)
{
if(*a>*b)return 1;
else if(*a==*b)return 0;
return -1;
}
int random(int n) //随机函数
{ srand(time(NULL));//产生随机种子
int a=rand()%n;
return a;
}
//--------------------------------------------------------------------------
/------------------------------------main.cpp------------------------------
#include <qapplication.h>
#include "homework.h"
int main(int argc,char**argv)
{
QApplication app(argc,argv);
HomeWork hw(0,"hw");
hw.setPixmap(QPixmap("bg.jpg"));
// hw.setAlignment(AlignCenter);
hw.setGeometry(200,200,600,600);
app.setMainWidget(&hw);
hw.show();
return app.exec();
}
//--------------------------------------------
求高手指教。谢谢了。