www.pudn.com > Five_QT_by_CT.rar > hall.cpp
#include "stdio.h"
#include "hall.h"
Hall::Hall(QWidget *parent , char *name)
:QWidget(parent , name)
{
mHallMaster=new HallMaster(this, 0);
mLoginButton =new QPushButton(this , 0 );
mQuitButton=new QPushButton(this , 0 ) ;
mWhiteButton=new QPushButton(this, 0 );
mBlackButton=new QPushButton(this, 0 );
mPlayerListView=new QListView(this);
mDeskListView = new QListView(this);
mPlayerInfoLabel= new QLabel ( this, 0, 0 );
mDeskInfoLabel= new QLabel ( this, 0, 0 );
mMyIDLabel=new QLabel ( this, 0, 0 );
mMyDeskLabel=new QLabel ( this, 0, 0 );
mAddrLineEdit=new QLineEdit( this, 0 );
mAddrLabel= new QLabel (QString ("Set Server IP:"), this, 0, 0);
mAddrInfoLabel=new QLabel (QString ("Current Server IP:"), this, 0, 0);
mMain=new Main(0,0);
mPlayerInfoLabel->setGeometry(10,20,200,30);
mDeskInfoLabel->setGeometry(250,20,200,30);
mMyIDLabel->setGeometry(10,10,170,40);
mMyDeskLabel->setGeometry(250,10,200,40);
mPlayerListView->setGeometry(10,60,200,320);
mDeskListView->setGeometry(250,60,200,320);
mLoginButton->setGeometry(10,390,100,30);
mQuitButton->setGeometry(110,390,100,30);
mWhiteButton->setGeometry(250,390,100,30);
mBlackButton->setGeometry(350,390,100,30);
mAddrLineEdit->setGeometry(110,440,100,20);
mAddrLabel->setGeometry(10,440,100,20);
mAddrInfoLabel->setGeometry(10,460,200,20);
mLoginButton->setText("Login");
mQuitButton->setText("Quit");
mWhiteButton->setText("White");
mBlackButton->setText("Black");
//setBackgroundPixmap(QPixmap("chessboard6_xmp"));
mPlayerInfoLabel->setText(QString("Players:"));
mDeskInfoLabel->setText(QString("Desks:"));
mMyIDLabel->setText(QString("Your ID:"));
mMyDeskLabel->setText(QString("Your desk num:"));
mPlayerInfoLabel->setFont( QFont( "Helvetica", 14 ) );
mDeskInfoLabel->setFont( QFont( "Helvetica", 14 ) );
mMyIDLabel->setFont( QFont( "Helvetica", 16 ) );
mMyDeskLabel->setFont( QFont( "Helvetica", 16 ) );
setMaximumSize(QSize(500,490));
setMinimumSize(QSize(500,490));
mPlayerListView->addColumn( "PlayerID" );
//mPlayerListView->addColumn( "State" );
//mPlayerListView->addColumn( "OpID" );
mPlayerListView->setAllColumnsShowFocus( TRUE );
mPlayerListView->setSelectionMode( QListView::Single );
mDeskListView->addColumn( "TableNum" );
mDeskListView->addColumn( "WhiteID" );
mDeskListView->addColumn( "BlackID" );
mDeskListView->setAllColumnsShowFocus( TRUE );
mDeskListView->setSelectionMode( QListView::Single );
connect( mLoginButton, SIGNAL(clicked()), this, SLOT(sLogin()) );
connect( mQuitButton, SIGNAL(clicked()), mHallMaster, SLOT(sonquit()) );
connect( mWhiteButton, SIGNAL(clicked()), this, SLOT(sSitdownWhite()) );
connect( mBlackButton, SIGNAL(clicked()), this, SLOT(sSitdownBlack()) );
connect( mMain, SIGNAL(sendmsgtohall(Message )), mHallMaster, SLOT(sdisposemsg(Message)));
connect( mHallMaster, SIGNAL(sendmsgtomain(Message)), mMain, SLOT(sdisposemsg(Message)));
connect( this, SIGNAL(sendmsgtohallmstr(Message)), mHallMaster, SLOT(sdisposemsg(Message)));
connect( mHallMaster, SIGNAL(updatehall()), this, SLOT(sUpDateHall()));
connect( mHallMaster, SIGNAL(showgameface()), this, SLOT(sShowMain()));
connect( mHallMaster, SIGNAL(quithall()), qApp, SLOT(quit()) );
connect( mAddrLineEdit, SIGNAL(returnPressed()), this, SLOT(sSetServeraddr()) );
}
void Hall::sLogin()
{
mHallMaster->Runner();
}
//界面"White"按钮被按下时驱动本函数
void Hall:: sSitdownWhite()
{
//找到桌号
if(mDeskListView->selectedItem ()==0)
return;
QListViewItem * item=mDeskListView->selectedItem ();
//调用HallMaster发送Sitdown()请求
Message msg;
msg.mRequest=QString("hallsitdown");
msg.mContent=item->text(0);
msg.mContent2=QString("white");
emit sendmsgtohallmstr(msg);
}
//界面"Black"按钮被按下时驱动本函数
void Hall:: sSitdownBlack()
{
//找到桌号
if(mDeskListView->selectedItem ()==0)
return;
QListViewItem * item=mDeskListView->selectedItem ();
//调用HallMaster发送Sitdown()请求
Message msg;
msg.mRequest=QString("hallsitdown");
msg.mContent=item->text(0);
msg.mContent2=QString("black");
emit sendmsgtohallmstr(msg);
}
//显示mMain
void Hall::sShowMain()
{
mMain->show();
}
void Hall::sSetServeraddr()
{
QString addr=mAddrLineEdit->text();
Message msg;
msg.mRequest="hallsetserveraddr";
msg.mContent=addr;
emit sendmsgtohallmstr( msg );
mAddrInfoLabel->setText(QString("Current Server IP: ")+addr);
mAddrLineEdit->clear();
}
//QListView的更新比较特殊,单独用一个函数来加条目
void Hall::AddPlayerListItem(int i)
{
QListViewItem *item ;
item = new QListViewItem( mPlayerListView );
item->setText( 0, mHallMaster->getPlayerID(i) );
item->setText( 1, mHallMaster->getPlayerDesknumber(i));
mPlayerListView->insertItem ( item );
}
void Hall::AddDeskTableItem(int i)
{
//转换i为QString
char tempt[10];
sprintf(tempt,"%d",i);
QString num=QString(tempt);
//添加条目,直接访问到HallMaster 的DeskTable成员
QListViewItem *item ;
item = new QListViewItem( mDeskListView );
item->setText( 0, num );
QString id=mHallMaster->getDeskWhiteside(i);
if(id.compare("-1")!=0&&id.compare("0")!=0)
item->setText( 1, id );
id=mHallMaster->getDeskBlackside(i);
if(id.compare("-1")!=0&&id.compare("0")!=0)
item->setText( 2, id );
mDeskListView->insertItem ( item );
}
void Hall::sUpDateHall()
{
int i=1;
QString id;
printf("Hall:: updateHall\n");
mPlayerListView->clear();
//逐条更新playertable
while(igetPlayerID(i).compare("-1")!=0)
AddPlayerListItem(i);
i++;
}
//更新桌位信息
mDeskListView->clear();
i=1;
while(isetText(QString("Your ID:")+mHallMaster->getMyID());
mMyDeskLabel->setText(QString("Your desk num:")+mHallMaster->getMyDesknumber());
}