Qt開發(fā)源碼(俄羅斯方塊)

上傳人:優(yōu)*** 文檔編號:57373969 上傳時間:2022-02-23 格式:DOC 頁數(shù):21 大?。?3.50KB
收藏 版權(quán)申訴 舉報 下載
Qt開發(fā)源碼(俄羅斯方塊)_第1頁
第1頁 / 共21頁
Qt開發(fā)源碼(俄羅斯方塊)_第2頁
第2頁 / 共21頁
Qt開發(fā)源碼(俄羅斯方塊)_第3頁
第3頁 / 共21頁

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《Qt開發(fā)源碼(俄羅斯方塊)》由會員分享,可在線閱讀,更多相關(guān)《Qt開發(fā)源碼(俄羅斯方塊)(21頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、真誠為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請指正。 俄羅斯方塊游戲 Main.cpp主程序代碼: #include #include #include "tetrixwindow.h" int main(int argc, char *argv[]) { // 為了能夠正常顯示中文,設(shè)置Tr編碼環(huán)境為GB2312 (詳見wiki) QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); // app這個對象用于管理應(yīng)用級別的資源 QAppl

2、ication app(argc, argv); app.setStyleSheet("TetrixBoard {background-color:lightGray}"); TetrixWindow window; window.setWindowIcon(QIcon(":/Chrome.ico")); window.show(); // 當(dāng)前時間作為隨機種子 qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); return app.exec(); // 程序的事件循環(huán) } Te

3、trixboard.h頭文件代碼: // 主游戲區(qū)類 #ifndef TETRIXBOARD_H #define TETRIXBOARD_H #include "tetrixpiece.h" #include #include #include #include // 前向聲明 class QLabel; class TetrixBoard : public QFrame { Q_OBJECT public: TetrixBoard(QWidget *parent =

4、 0); void setNextPieceLabel(QLabel *label); QSize sizeHint() const;//最適合大小 QSize minimumSizeHint() const; // 最小限制 public slots: // 公有槽 void start(); void pause(); signals: // 信號:只需聲明,根據(jù)參數(shù)變化來判斷 void scoreChanged(int score); void levelChanged(int level); void linesRem

5、ovedChanged(int numLines); protected: // 著色、鍵盤、計時事件:其中著色事件隨著update()不斷觸發(fā) void paintEvent(QPaintEvent *event); void keyPressEvent(QKeyEvent *event); void timerEvent(QTimerEvent *event); private: enum { BoardWidth = 10, BoardHeight = 22 }; // 把主游戲區(qū)寬分成10等份,高分成22等份,也就是說每行有10小矩形

6、,總共有22行 TetrixShape &shapeAt(int x, int y) { return board[(y * BoardWidth) + x]; } int timeoutTime() { return 1000 / (1 + level); } // contentsRect():返回當(dāng)前布局(QLayout)的矩形,可訪問其長、寬 (詳見API) // conntentsRect().width()/BoardWidth 把游戲區(qū)矩形的寬分成了BoardWidth份 int squareWidth() { return content

7、sRect().width() / BoardWidth; } // 同上,把高分成了BoardHeight份 int squareHeight() { return contentsRect().height() / BoardHeight; } // 此時squareWidth(),squareHeight()分別是分割后的小矩形寬和高 void clearBoard(); // 清屏 void dropDown(); // 下落事件 void oneLineDown();// 下落一行 void pieceDropped(int

8、 dropHeight); void removeFullLines(); // 移除填滿的行 void newPiece(); // 新方塊 void showNextPiece(); // 顯示下一個方塊 bool tryMove(const TetrixPiece &newPiece, int newX, int newY); // 判斷方塊是否可以移動 void drawSquare(QPainter &painter, int x, int y, TetrixShape shape); // 著色 QBasicTimer timer;

9、 // 相當(dāng)于QLabel *nextPieceLabel(QPointer詳見API) QPointer nextPieceLabel; bool isStarted; bool isPaused; bool isWaitingAfterLine; TetrixPiece curPiece; // 當(dāng)前方塊 TetrixPiece nextPiece; // 下一個方塊 int curX; int curY; int numLinesRemoved; int numPiecesDropped

10、; int score; int level; TetrixShape board[BoardWidth * BoardHeight]; }; #endif // TETRIXBOARD_H Tetrixboard.cpp程序代碼: #include #include "tetrixboard.h" TetrixBoard::TetrixBoard(QWidget *parent) : QFrame(parent) { // 設(shè)置游戲區(qū)框架風(fēng)格:內(nèi)浮雕 setFrameStyle(QFrame::Panel |

11、QFrame::Sunken); // 增加游戲區(qū)鍵盤鼠標(biāo)等事件的焦點集中 setFocusPolicy(Qt::StrongFocus); isStarted = false; // 初始化:未開始狀態(tài) isPaused = false; clearBoard(); // 初始清屏 nextPiece.setRandomShape(); // 下一方塊獲得一個隨機形狀 } // tetrixpiece.h : tetrixpiece.cpp中使用 void TetrixBoard::setNextPieceLabel(QLabel *la

12、bel) { nextPieceLabel = label; } // 游戲區(qū)合適大小 QSize TetrixBoard::sizeHint() const { return QSize(BoardWidth*15 + frameWidth()*2, BoardHeight*15 + frameWidth()*2); } // 游戲區(qū)最小大小 QSize TetrixBoard::minimumSizeHint() const { return QSize(BoardWidth*5 + frameWidth()*2,

13、 BoardHeight*5 + frameWidth()*2); } // 開始事件:slots void TetrixBoard::start() { // 如果已暫停,則啟動無效 if (isPaused) return; isStarted = true; // 標(biāo)記已開始 isWaitingAfterLine = false; // 此參數(shù)為判斷是否有方塊正在下落,false為有方塊正在下落中 // 初始各參數(shù) numLinesRemoved = 0; numPi

14、ecesDropped = 0; score = 0; level = 1; clearBoard(); // 清屏 // emit 信號發(fā)射:觸發(fā)對應(yīng)信號槽內(nèi)的函數(shù)(相關(guān)connect()在tetrixwindow.cpp中) emit linesRemovedChanged(numLinesRemoved); emit scoreChanged(score); emit levelChanged(level); newPiece(); // 調(diào)用新方塊 timer.start(timeoutTime(), this);

15、// 游戲開始計時 } // 暫停事件:slots void TetrixBoard::pause() { // 如果未開始,則暫停無效 if (!isStarted) return; // 否則,若未暫停,則賦值為暫停,反之,取消暫停,繼續(xù)游戲 isPaused = !isPaused; if (isPaused) { timer.stop(); // 游戲計時停止 } else { timer.start(timeoutTime(), this); // 否則繼續(xù)計時 }

16、 update(); // 刷新窗口:動態(tài)顯示畫面 } // 游戲區(qū)方塊著色 // 重定義繪圖事件,當(dāng)調(diào)用update()時進(jìn)行重繪 void TetrixBoard::paintEvent(QPaintEvent *event) { QFrame::paintEvent(event); QPainter painter(this); QRect rect = contentsRect(); // QRect定義了平面上的矩形 (詳見API),是主游戲區(qū) // 暫停的時候顯示的信息 if (isPaused) { pai

17、nter.drawText(rect, Qt::AlignCenter, tr("游戲暫停")); return; } // BoardHeight*squareHeight() 相當(dāng)于 contentsRect().Height(),是小網(wǎng)格的高 // 因為squareHeight() {return contentsRect().Width()/BoardWidth();} // 見tetrixboard.h中的定義 int boardTop = rect.bottom() - BoardHeight*squareHeight(

18、); for (int i=0; i

19、) 返回游戲區(qū)矩形左邊的x坐標(biāo),squareWidth()為小網(wǎng)格的寬度 drawSquare(painter, rect.left() + j*squareWidth(), boardTop + i*squareHeight(), shape); } } // 繪圖 if (curPiece.shape() != NoShape) { for (int i=0; i<4; ++i) { int x = curX + curPie

20、ce.x(i); int y = curY - curPiece.y(i); drawSquare(painter, rect.left() + x*squareWidth(), boardTop + (BoardHeight - y - 1 )*squareHeight(), curPiece.shape()); } } } // 鍵盤事件 void TetrixBoard::keyPressEvent(QKeyEvent

21、*event) { if (!isStarted || isPaused || curPiece.shape() == NoShape) { QFrame::keyPressEvent(event); return; } switch (event->key()) { case Qt::Key_Left: tryMove(curPiece, curX-1, curY); // 左移 break; case Qt::Key_Right: tryMove(curPiece, c

22、urX+1, curY); // 右移 break; case Qt::Key_Up: tryMove(curPiece.rotatedLeft(),curX,curY); // 方塊左轉(zhuǎn) break; case Qt::Key_Down: dropDown(); // 快速下落 break; default: QFrame::keyPressEvent(event); } } // 計時時間 void TetrixBoard::timerEvent(QTim

23、erEvent *event) { if (event->timerId() == timer.timerId()) { // 如果還有方塊已下落完畢 if (isWaitingAfterLine) { isWaitingAfterLine = false; // 重標(biāo)記為有方塊正在下落 newPiece(); // 添加新方塊 (timeoutTime(), this); } else { oneLineDown(); //否則進(jìn)行下落動作

24、 } } else { QFrame::timerEvent(event); } } // 清空游戲區(qū)所有繪圖 void TetrixBoard::clearBoard() { for (int i=0; i

25、落過程,并求得方塊還能下落的最大高度 while (newY > 0) { if (!tryMove(curPiece,curX,newY-1)) break; --newY; ++dropHeight; } // 把下落高度傳遞給此函數(shù) pieceDropped(dropHeight); } // 正常下落操作 void TetrixBoard::oneLineDown() { if (!tryMove(curPiece, curX,curY-1)) // 如果能移動,則下

26、落一行 pieceDropped(0);// 正常下落不幾分 } // 進(jìn)行方塊下落后的行為,如繪圖,加分等 參數(shù):下落方塊的高度 void TetrixBoard::pieceDropped(int dropHeight) { for (int i=0; i<4; ++i) { int x = curX + curPiece.x(i); int y = curY - curPiece.y(i); shapeAt(x,y) = curPiece.shape(); } ++numPiecesDrop

27、ped; // 等級劃分,加快下落速度 if (numPiecesDropped % 25 == 0) { ++level; timer.start(timeoutTime(), this); // 加速,游戲時間加快 emit levelChanged(level); } emit scoreChanged(score); // 判斷是否已有滿行 removeFullLines(); if (!isWaitingAfterLine) newPiece(); } // 移

28、除整行 void TetrixBoard::removeFullLines() { int numFullLines = 0; // 循環(huán)判斷有幾行已滿 for (int i = BoardHeight-1; i >= 0; --i) { bool lineIsFull = true; // 判斷是否已滿一行 for (int j=0; j < BoardWidth; ++j) { if (shapeAt(j,i)==NoShape) { lineIsFull =

29、 false; break; } } // 上面所有行下移 if (lineIsFull) { ++numFullLines; for(int k = i; k < BoardHeight-1; ++k) { for (int j = 0; j < BoardWidth; ++j) shapeAt(j,k) = shapeAt(j, k+1); }

30、 // 整行清零 for (int j = 0; j < BoardWidth; ++j) { shapeAt(j, BoardHeight-1) = NoShape; score += numFullLines-1 ; } } } // 如果已滿行數(shù)大于0,則進(jìn)行加分等操作,并更新窗口 if (numFullLines > 0) { numLinesRemoved += numFu

31、llLines; score += 10 * numFullLines; // 同時發(fā)送信號至相應(yīng)的槽 emit linesRemovedChanged(numLinesRemoved); emit scoreChanged(score); (500,this); isWaitingAfterLine = true; curPiece.setShape(NoShape); update(); } } // 新方塊 void TetrixBoard::ne

32、wPiece() { curPiece = nextPiece; // 預(yù)先隨機設(shè)置好一下塊方塊 nextPiece.setRandomShape(); showNextPiece(); // 設(shè)置其初始下落的位置,在游戲區(qū)頂部中央 curX = BoardWidth / 2 + 1; curY = BoardHeight-1 + curPiece.minY(); // 判斷其是否還能移動,如果不能,則停止游戲 if (!tryMove(curPiece, curX, curY)) { curPiece.

33、setShape(NoShape); // painter.drawText(rect,tr("游戲結(jié)束")); timer.stop(); isStarted = false; } } // 展示下一個方塊 void TetrixBoard::showNextPiece() { if (!nextPieceLabel) return; int dx = nextPiece.maxX() - nextPiece.minX() + 1; int dy = nextPiece.maxY() -

34、nextPiece.minY() + 1; QPixmap pixmap(dx *squareWidth(), dy*squareHeight()); //映射要顯示方塊像素 QPainter painter(&pixmap); // 開始繪制該方塊 painter.fillRect(pixmap.rect(), nextPieceLabel->palette().background()); // 先繪制要顯示方塊的背景色 // 再開始繪制方塊本身 for (int i = 0; i < 4; ++i) { int x = ne

35、xtPiece.x(i) - nextPiece.minX(); int y = nextPiece.y(i) - nextPiece.minY(); drawSquare(painter, x*squareWidth(), y*squareHeight(), nextPiece.shape()); } nextPieceLabel->setPixmap(pixmap);// 最后加載它 } // 判斷是否還能移動 bool TetrixBoard::tryMove(const TetrixPiece

36、&newPiece, int newX, int newY) { for (int i = 0; i < 4; ++i) { int x = newX + newPiece.x(i); int y = newY - newPiece.y(i); if (x < 0 || x >= BoardWidth || y < 0 || y >= BoardHeight) return false; if (shapeAt(x,y) != NoShape) // 判斷當(dāng)前位置是否有其他方塊

37、 return false; } curPiece = newPiece; curX = newX; curY = newY; update(); return true; } // int squareWidth() { return contentsRect().width() / BoardWidth; } // int squareHeight() { return contentsRect().height() / BoardHeight; } void TetrixBoard::drawSquare(QPainter &p

38、ainter, int x,int y,TetrixShape shape) { // google色彩 static const QRgb colorTable[8] = { 0x000000, 0x1851ce, 0xc61800, 0xefba00, 0x1851ce, 0x1ba823, 0xc61800, 0x606060 }; QColor color = colorTable[int(shape)]; // 填充單元網(wǎng)格的顏色 // void fillRect(int x, int y, int w

39、idth, int height, const QColor & color) painter.fillRect(x + 1, y + 1, squareWidth() - 2, squareHeight() - 2, color); painter.setPen(color.light()); // 左上角邊框顏色 // void drawLine(int x1, int y1, int x2, int y2) painter.drawLine(x, y + squareHeight() - 1, x,

40、 y); painter.drawLine(x, y, x + squareWidth() - 1, y); painter.setPen(color.dark()); // 右下角邊框顏色 painter.drawLine(x + 1, y + squareHeight() - 1, x + squareWidth() - 1, y + squareHeight() - 1); painter.drawLine(x + squareWidth() - 1, y + squareHeight() - 1,

41、 x + squareWidth() - 1, y + 1); } Tetrixpiece.h頭文件代碼: // 俄羅斯方塊類:方塊形狀/旋轉(zhuǎn)情況 #ifndef TETRIXPIECE_H #define TETRIXPIECE_H // 定義一個枚舉類型(0-7):無形狀、Z字形、S字形、直線形,T字形,田字形形、L字形,翻轉(zhuǎn)L字形 enum TetrixShape { NoShape, ZShape,SShape,LineShape,TShape,SquareShape, LShap

42、e,MirroredLShape }; class TetrixPiece { public: TetrixPiece() { setShape(NoShape); } // inline構(gòu)造函數(shù):初始設(shè)置成NoShape void setRandomShape(); // 設(shè)置隨機規(guī)則 void setShape(TetrixShape shape); // 構(gòu)造方塊形狀的數(shù)據(jù)結(jié)構(gòu) // 通過inline公有函數(shù)成員shape()訪問私有數(shù)據(jù)成員pieceShape TetrixShape shape() const { return piece

43、Shape; } int x(int index) const { return coords[index][0]; } int y(int index) const { return coords[index][1]; } int minX() const; int maxX() const; int minY() const; int maxY() const; TetrixPiece rotatedLeft() const; // 左轉(zhuǎn) private: void setX(int index, int x) { coor

44、ds[index][0] = x; } void setY(int index, int y) { coords[index][1] = y; } TetrixShape pieceShape; // 枚舉類型創(chuàng)建一個該枚舉類型對象 int coords[4][2]; }; #endif // TETRIXPIECE_H Tetrixpiece.cpp程序代碼: #include #include "tetrixpiece.h" #include #include #include

45、me> // 偽隨機函數(shù):利用當(dāng)前系統(tǒng)時間增加隨機性 void TetrixPiece::setRandomShape() { //QTime time = QTime::currentTime(); //qsrand( time.msec() + time.second()*1000 );// 重設(shè)隨機種子:當(dāng)前時間為隨機變量 setShape(TetrixShape(qrand()%7 + 1)); // 共六種方塊形狀 } void TetrixPiece::setShape(TetrixShape shape) { // 按TetrixShap

46、e枚舉順序構(gòu)建: // 除NoShape外,每個形狀由4個小方塊組成,這里每行的四個坐標(biāo)即4個小方塊的坐標(biāo),其中橫向為X,縱向為Y // ZShape SShape LineShape TShape SquareShape LShape MirroredLShape // -1 0 1 2 -1 0 1 2 -1 0 1 2 -1 0 1 2 -1 0 1 2 -1 0 1 2 -1 0 1 2 // -1 * -1 * -1 * -1 -1

47、 -1 * * -1 * * // 0 * * 0 * * 0 * 0 * * * 0 * * 0 * 0 * // 1 * 1 * 1 * 1 * 1 * * 1 * 1 * // 2 2 2 * 2 2 2 2 static const int coordsTable[8][4][2] = { { { 0,

48、 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } },// NoShape { { 0, -1 }, { 0, 0 }, { -1, 0 }, { -1, 1 } }, { { 0, -1 }, { 0, 0 }, { 1, 0 }, { 1, 1 } }, { { 0, -1 }, { 0, 0 }, { 0, 1 }, { 0, 2 } }, { { -1, 0 }, { 0, 0 }, { 1, 0 }, { 0,

49、1 } }, { { 0, 0 }, { 1, 0 }, { 0, 1 }, { 1, 1 } }, { { -1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } }, { { 1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } } }; for (int i=0; i<4; i++) { for (int j=0; j<2; ++j) coords[i][j] = coor

50、dsTable[shape][i][j]; } pieceShape = shape; } // 獲取最小X坐標(biāo)值,QtGlobal::qMin int TetrixPiece::minX() const { int min = coords[0][0]; for (int i = 1; i < 4; ++i) min = qMin(min, coords[i][0]); return min; } // 獲取最大X坐標(biāo)值,QtGlobal::qMax int TetrixPiece::maxX() const {

51、 int max = coords[0][0]; for (int i = 1; i < 4; ++i) max = qMax(max, coords[i][0]); return max; } // 獲取最小Y坐標(biāo)值 int TetrixPiece::minY() const { int min = coords[0][1]; for (int i = 1; i < 4; ++i) min = qMin(min, coords[i][1]); return min; } // 獲取最大Y坐標(biāo)值 int Te

52、trixPiece::maxY() const { int max = coords[0][1]; for (int i = 0; i < 4; ++i) max = qMax(max, coords[i][1]); return max; } // 按順時針方向左轉(zhuǎn)90度: // x = -y; // y = x; TetrixPiece TetrixPiece::rotatedLeft() const { if (pieceShape == SquareShape) return *this; Tetri

53、xPiece result; result.pieceShape = pieceShape; for (int i = 0; i < 4; ++i) { result.setX(i,-y(i)); result.setY(i,x(i)); } return result; } Tetrixwindow.h頭文件代碼: // 主窗口類:控制區(qū)/游戲區(qū) #ifndef TETRIXWINDOW_H #define TETRIXWINDOW_H #include #include

54、et> /* 前向聲明: 因為此處只使用這些類的指針,沒有涉及相關(guān)函數(shù), 并不需要include它們的頭文件,那樣會減慢編譯速度 */ QT_BEGIN_NAMESPACE class QLCDNumber; class QLabel; class QPushButton; QT_END_NAMESPACE class TetrixBoard; class TetrixWindow : public QWidget { // 這個宏定義涉及到Qt高級部分,我們現(xiàn)在只需知道 // tr()\connecet()\slots\signals與之有關(guān)

55、 Q_OBJECT public: TetrixWindow(); public slots: void About(); private: /* 聲明需要用到的一些部件的指針,包括:開始、暫停、退出按鈕, 分?jǐn)?shù)、等級、消去行數(shù)、下一個方塊顯示區(qū)等*/ QLabel *createLabel(const QString &text); TetrixBoard *board; // 自定義游戲邏輯類對象指針 QLabel *nextPieceLabel; QLCDNumber *scoreLcd; QLCDN

56、umber *levelLcd; QLCDNumber *linesLcd; QPushButton *startButton; QPushButton *quitButton; QPushButton *pauseButton; QPushButton *aboutButton; }; #endif //TETRIXWINDOW_H Tetrixwindow.cpp程序代碼: #include #include "tetrixboard.h" #include "tetrixwindow.h" // 構(gòu)造函數(shù):將聲明的

57、抽象部件實例化 TetrixWindow::TetrixWindow() { board = new TetrixBoard; // board為主游戲區(qū) nextPieceLabel = new QLabel; // Raised:浮雕 Box:draw a box around its contents //nextPieceLabel->setFrameStyle(QFrame::Box | QFrame::Raised); nextPieceLabel->setAlignment(Qt::AlignCenter); // 居中顯示 /

58、/ 通過該函數(shù)將nextPieceLabel賦值給board對象私有變量nextPieceLabel: // 不是友元或繼承關(guān)系無法直接調(diào)用其私有成員 board->setNextPieceLabel(nextPieceLabel); // Lcd數(shù)字顯示器 scoreLcd = new QLCDNumber(5); // 最大為5位數(shù) scoreLcd->setSegmentStyle(QLCDNumber::Filled); // 浮雕顯示數(shù)字 (詳見API) levelLcd = new QLCDNumber(5); levelLc

59、d->setSegmentStyle(QLCDNumber::Filled); linesLcd = new QLCDNumber(5); linesLcd->setSegmentStyle(QLCDNumber::Filled); // 按鈕實例化:設(shè)置為NoFocus,避免與游戲按鍵沖突 startButton = new QPushButton(tr("&開始")); startButton->setFocusPolicy(Qt::NoFocus); quitButton = new QPushButton(tr("&退出"));

60、quitButton->setFocusPolicy(Qt::NoFocus); pauseButton = new QPushButton(tr("&暫停")); pauseButton->setFocusPolicy(Qt::NoFocus); aboutButton = new QPushButton(tr("&關(guān)于")); aboutButton->setFocusPolicy(Qt::NoFocus); // 相應(yīng)信號槽連接[Qt核心]:QObject::connect(信號發(fā)射對象,SIGNAL(信號),接收對象,SLOT(觸發(fā)槽))

61、 // 信號(signals):可以只聲明不定義; 觸發(fā)槽(slots):信號響應(yīng)函數(shù) connect(startButton, SIGNAL(clicked()), board, SLOT(start())); connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit())); connect(pauseButton, SIGNAL(clicked()), board, SLOT(pause())); connect(aboutButton, SIGNAL(clicked()), this, SLOT(Abo

62、ut())); connect(board, SIGNAL(scoreChanged(int)), scoreLcd, SLOT(display(int))); connect(board, SIGNAL(levelChanged(int)), levelLcd, SLOT(display(int))); connect(board, SIGNAL(linesRemovedChanged(int)), linesLcd, SLOT(display(int))); // 將各部件(Widget)按網(wǎng)格排列 QGridLayout *

63、layout = new QGridLayout; layout->addWidget(createLabel(tr("下一個")),0,0); layout->addWidget(nextPieceLabel,1,0,3,1); layout->addWidget(createLabel(tr("關(guān)卡")),4,0); layout->addWidget(levelLcd,5,0); // 主游戲區(qū) layout->addWidget(board,0,1,14,2); layout->addWidget(createLabel(tr("

64、分?jǐn)?shù)")),6,0); layout->addWidget(scoreLcd,7,0); layout->addWidget(createLabel(tr("消行")),8,0); layout->addWidget(linesLcd,9,0); layout->addWidget(startButton,10,0); layout->addWidget(pauseButton,11,0); layout->addWidget(aboutButton,12,0); layout->addWidget(quitButton,13,0);

65、 setLayout(layout); // 設(shè)置該布局,使之有效 // QWidget:: setWindowTitle(tr("俄羅斯方塊")); // 設(shè)置主窗口標(biāo)題 int w = 423; int h = 530; resize(w,h); // 設(shè)置主窗口默認(rèn)大小 寬*高 setMaximumSize(w,h); setMinimumSize(w,h); } // 重定義QLabel類對象:使之居中,置底顯示 QLabel *TetrixWindow::createLabel(const QString &text) { QLabel *lbl = new QLabel(text); lbl->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); return lbl; } void TetrixWindow::About() { QMessageBox::information(NULL, tr("關(guān)于"), tr(" 作 者 : 曾奇凡

Thanks Qt4.7

\n

版本: 1.0.0\t日期: 2012.5.15

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!