⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dining_gui.c

📁 C++ SOCKET 类
💻 C
字号:
#include "dining_gui.h"extern "C" {#  include <stdlib.h>};Dining::Dining(QApplication *a,int nr)  : QWidget( 0,"guiDiner" ), dining(nr){  int i;  app = a;  eating = new _state[nr];  for( i=0;i<nr;i++ )    eating[i] = Sleeping;}Dining::~Dining(){}voidDining::paintEvent(QPaintEvent *p_ev){  int i;  for( i=0;i<dining::nr();i++ ) {    paintDish( i );    paintFork( i );  }}voidDining::showForks(int p_nr){  int lfork,rfork;  lfork = p_nr-1 >= 0 ? p_nr-1 : nr()-1;  rfork = lfork+1 >= nr() ? 0 : lfork+1;  paintFork(lfork);  paintFork(rfork);}boolDining::get_forks(int p_no){  bool rv;  rv = dining::get_forks(p_no);  eating[p_no] = ( rv ? Eating : Looking );  paintDish(p_no);  showForks(p_no);  return rv;}voidDining::put_forks(int p_nr){  dining::put_forks(p_nr);  eating[p_nr] = Sleeping;  paintDish(p_nr);  showForks(p_nr);}voidDining::finished(int p_nr){  eating[p_nr] = Gone;  dining::finished(p_nr);  paintDish(p_nr);  showForks(p_nr);}voidDining::getvalues(int no,double& degr,int& w,int& h, int& nr){  nr   = dining::nr();  h    = height()/nr;  w    = width()/nr;  degr = 360/nr;}voidDining::paintDish(int p_no){  QPainter p;  double degrees;  int w,h,nr,r;  getvalues(p_no,degrees,w,h,nr);  r = ( h>w ? w:h );  gui_access.lock();  p.begin( this );  p.translate( width()/2,height()/2 );  p.rotate( (degrees*p_no)+(degrees/w*r) );  switch( eating[p_no] ) {  case Eating:    p.setPen( black );    break;  case Sleeping:    p.setPen( yellow );    break;  case Looking:    p.setPen( blue );    break;  default:    p.setPen( colorGroup().color(QColorGroup::Background) );  }  p.drawArc(r,r,r,r,0,360*16);  p.end();  gui_access.unlock();}voidDining::paintFork(int p_no){  QPainter p;  double degrees;  int w,h,nr,r;  getvalues(p_no,degrees,w,h,nr);  r = ( h>w ? w:h );  gui_access.lock();  p.begin( this );  p.translate( width()/2,height()/2 );  p.rotate( (degrees*p_no)+(degrees/2) );  if ( dining::isLocked(p_no) )    p.eraseRect(0,3*h/2,5,h);  else    p.drawRect(0,3*h/2,5,h);  p.end();  if ( app )    app->wakeUpGuiThread();  gui_access.unlock();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -