QT教程 休闲棋牌游戏开发(2)

来源:互联网 发布:微电阻测试仪单片机 编辑:程序博客网 时间:2024/05/17 02:47

这一教程我们来做一个好看的窗口界面。。。

 开发工具Qt Creator + qt 4.7 可到http://qt.nokia.com/downloads 下载LGPL和对应你所用的系统的那个版本。。

 

mainwindow.h

[cpp] view plaincopy
  1. /*/////////////////////////////////////////////////////////////// 
  2. 2011年。写于日本地震前几天。。。。 
  3. 作者CK。。。 
  4. QQ:78961410.. 
  5. 老婆淘宝:yoyock.taobao.com - -.... 
  6. ///////////////////////////////////////////////////////////////*/  
  7. #ifndef MAINWINDOW_H  
  8. #define MAINWINDOW_H  
  9. #include <QMainWindow>  
  10. class MyButton;  
  11. class MainWindow : public QMainWindow  
  12. {  
  13.     Q_OBJECT  
  14.   
  15. public:  
  16.     explicit MainWindow(QWidget *parent = 0);  
  17.     ~MainWindow();  
  18. protected:  
  19.     virtual void paintEvent(QPaintEvent * event);  
  20.     virtual void resizeEvent(QResizeEvent * event);  
  21.   
  22.     virtual void mouseMoveEvent(QMouseEvent *e);  
  23.     virtual void mousePressEvent(QMouseEvent *e);  
  24.     virtual void mouseReleaseEvent(QMouseEvent *e);  
  25.     virtual void mouseDoubleClickEvent(QMouseEvent *e);  
  26. private:  
  27.     QPixmap      m_TopLeftPix;  
  28.     QPixmap      m_TopRightPix;  
  29.     QPixmap      m_TopCentrePix;  
  30.     QPixmap      m_BottomLeftPix;  
  31.     QPixmap      m_BottomRightPix;  
  32.     QPixmap      m_BottomCentrePix;  
  33.     QPixmap      m_LeftPix;  
  34.     QPixmap      m_RightPix;  
  35.     QPixmap      m_LeftDecoratePix;  
  36.   
  37.     MyButton     *m_pCloseBtn;  
  38.     MyButton     *m_pMinBtn;  
  39.     MyButton     *m_pMaxBtn;  
  40.     MyButton     *m_pWinBtn;  
  41.   
  42.     bool         m_bIsMaxSize;  
  43.   
  44.     QPoint m_last;  
  45.     QPoint m_pos0;  
  46.     QPoint m_last2;  
  47. signals:  
  48. public slots:  
  49.         void minsize();  
  50.         void maxsize();  
  51.         void winsize();  
  52.         void wclose();  
  53.   
  54. };  
  55.   
  56. #endif // MAINWINDOW_H  

 

mainwindow.cpp

[cpp] view plaincopy
  1. /*/////////////////////////////////////////////////////////////// 
  2. 2011年。写于日本地震前几天。。。。 
  3. 作者CK。。。 
  4. QQ:78961410.. 
  5. 老婆淘宝:yoyock.taobao.com - -.... 
  6. ///////////////////////////////////////////////////////////////*/  
  7.   
  8. #include "mainwindow.h"  
  9. #include "mybutton.h"  
  10. #include <QPainter>  
  11. #include <QtGui>  
  12. MainWindow::MainWindow(QWidget *parent) :  
  13.     QMainWindow(parent)  
  14.     ,m_bIsMaxSize(true)  
  15. {  
  16.   
  17.     setWindowState(Qt::WindowNoState);  
  18.     setWindowFlags( Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint );  
  19.   
  20.     m_TopLeftPix = QPixmap(QString("image/topleft.png"));  
  21.     m_TopRightPix = QPixmap(QString("image/topright.png"));  
  22.     m_TopCentrePix = QPixmap(QString("image/topcentre.png"));  
  23.   
  24.     m_BottomLeftPix = QPixmap(QString("image/bottomleft.png"));  
  25.     m_BottomRightPix = QPixmap(QString("image/bottomright.png"));  
  26.     m_BottomCentrePix = QPixmap(QString("image/bottomcentre.png"));  
  27.   
  28.     m_LeftPix = QPixmap(QString("image/left.png"));  
  29.     m_RightPix = QPixmap(QString("image/right.png"));  
  30.     m_LeftDecoratePix = QPixmap(QString("image/leftdecorate.png"));  
  31.   
  32.     m_pCloseBtn = new MyButton(this,QString("image/button/close_1.png"),  
  33.                                     QString("image/button/close_2.png"),  
  34.                                     QString("image/button/close_3.png"),  
  35.                                     QString("image/button/close_4.png"));  
  36.   
  37.     m_pMinBtn = new MyButton(this,QString("image/button/min_1.png"),  
  38.                                     QString("image/button/min_2.png"),  
  39.                                     QString("image/button/min_3.png"),  
  40.                                     QString("image/button/min_4.png"));  
  41.   
  42.     m_pMaxBtn = new MyButton(this,QString("image/button/max_1.png"),  
  43.                                     QString("image/button/max_2.png"),  
  44.                                     QString("image/button/max_3.png"),  
  45.                                     QString("image/button/max_4.png"));  
  46.   
  47.     m_pWinBtn = new MyButton(this,QString("image/button/win_1.png"),  
  48.                                     QString("image/button/win_2.png"),  
  49.                                     QString("image/button/win_3.png"),  
  50.                                     QString("image/button/win_4.png"));  
  51.   
  52.     m_pMaxBtn->hide();  
  53.   
  54.     connect(m_pMinBtn, SIGNAL(clicked()),this,SLOT(minsize()));  
  55.     connect(m_pMaxBtn, SIGNAL(clicked()),this,SLOT(maxsize()));  
  56.     connect(m_pWinBtn, SIGNAL(clicked()),this,SLOT(winsize()));  
  57.     connect(m_pCloseBtn, SIGNAL(clicked()),this,SLOT(wclose()));  
  58.   
  59. }  
  60.   
  61. MainWindow::~MainWindow()  
  62. {  
  63.   
  64. }  
  65.   
  66. void MainWindow::paintEvent(QPaintEvent * event)  
  67. {  
  68.     QPainter painter(this);  
  69.     painter.drawPixmap(5,0,this->width()-10,m_TopCentrePix.height(),m_TopCentrePix);  
  70.     painter.drawPixmap(0,5,m_LeftPix.width(),height()-10,m_LeftPix);  
  71.     painter.drawPixmap(width()- m_RightPix.width(),5,m_RightPix.width(),height()-10,m_RightPix);  
  72.     painter.drawPixmap(5,this->height()-m_BottomCentrePix.height(),this->width()-10,m_BottomCentrePix.height(),m_BottomCentrePix);  
  73.   
  74.     painter.drawPixmap(0,0,m_TopLeftPix);  
  75.     painter.drawPixmap(width()- m_TopRightPix.width(),0,m_TopRightPix);  
  76.     painter.drawPixmap(0,height() - m_BottomLeftPix.height(),m_BottomLeftPix);  
  77.     painter.drawPixmap(width()-m_BottomRightPix.width(),height() - m_BottomRightPix.height(),m_BottomRightPix);  
  78.   
  79.     painter.drawPixmap(0,(height() - m_LeftDecoratePix.height())/2,m_LeftDecoratePix);  
  80.   
  81. }  
  82. void MainWindow::resizeEvent(QResizeEvent * event)  
  83. {  
  84.     m_pCloseBtn->move(width()-7-m_pCloseBtn->width(),16);  
  85.     m_pMaxBtn->move(m_pCloseBtn->x()-m_pMaxBtn->width(),16);  
  86.     m_pWinBtn->move(m_pMaxBtn->x(),16);  
  87.     m_pMinBtn->move(m_pWinBtn->x()-m_pMinBtn->width(),16);  
  88. }  
  89.   
  90. void MainWindow::minsize()  
  91. {  
  92.     showMinimized();  
  93. }  
  94.   
  95. void MainWindow::maxsize()  
  96. {  
  97.   
  98.     m_pMaxBtn->hide();  
  99.     m_pWinBtn->show();  
  100.     setGeometry(QApplication::desktop()->availableGeometry());  
  101.     m_bIsMaxSize = !m_bIsMaxSize;  
  102.   
  103. }  
  104.   
  105. void MainWindow::winsize()  
  106. {  
  107.     m_pMaxBtn->show();  
  108.     m_pWinBtn->hide();  
  109.     QRect rect = QApplication::desktop()->availableGeometry();  
  110.   
  111.     int x = (rect.width()-800)/2;  
  112.     int y = (rect.height()-600)/2;  
  113.     setGeometry(x,y,800,600);  
  114.   
  115.     m_bIsMaxSize = !m_bIsMaxSize;  
  116.   
  117. }  
  118.   
  119. void MainWindow::wclose()  
  120. {  
  121.     this->close();  
  122. }  
  123. void MainWindow::mouseMoveEvent(QMouseEvent *e)  
  124. {  
  125.         if ( (m_last2.x() == -1) || (m_last2.x() >= 0 && m_last2.x() <= width() && m_last2.y() >= 20 && m_last2.y() <= height())  
  126.                 || m_bIsMaxSize)  
  127.         {  
  128.                 return;  
  129.         }  
  130.   
  131.         QPoint newpos = e->globalPos();  
  132.         QPoint upleft = m_pos0 + newpos - m_last;  
  133.         move(upleft);  
  134. }  
  135. void MainWindow::mousePressEvent(QMouseEvent *e)  
  136. {  
  137.         this->m_last = e->globalPos();  
  138.         m_pos0 = e->globalPos() - e->pos();  
  139.         m_last2 = e->pos();  
  140. }  
  141. void MainWindow::mouseReleaseEvent(QMouseEvent *e)  
  142. {  
  143.         m_last2.setX(-1);  
  144. }  
  145. void MainWindow::mouseDoubleClickEvent(QMouseEvent *e)  
  146. {  
  147.         if(e->pos().y()<=20)  
  148.         {  
  149.             if(m_bIsMaxSize)  
  150.             {  
  151.                 winsize();  
  152.             }  
  153.             else  
  154.             {  
  155.                 maxsize();  
  156.             }  
  157.         }  
  158. }  

 

mybutton.h

[cpp] view plaincopy
  1. /*/////////////////////////////////////////////////////////////// 
  2. 2011年。写于日本地震前几天。。。。 
  3. 作者CK。。。 
  4. QQ:78961410.. 
  5. 老婆淘宝:yoyock.taobao.com - -.... 
  6. ///////////////////////////////////////////////////////////////*/  
  7. #ifndef MYBUTTON_H  
  8. #define MYBUTTON_H  
  9. #include <QAbstractButton>  
  10. #include <qpixmap>  
  11. class MyButton : public QAbstractButton  
  12. {  
  13.     Q_OBJECT  
  14. public:  
  15.     explicit MyButton(QWidget* parent,QString str1,QString str2="",QString str3="",QString str4="");  
  16.     virtual void paintEvent(QPaintEvent * e);  
  17.     virtual void enterEvent(QEvent * e);  
  18.     virtual void leaveEvent(QEvent * e);  
  19. private:  
  20.     //四张图片代表按钮的四个状态,1,默认状态。2,鼠标移动状态。3,鼠标按下状态,4,按钮不可用状态。  
  21.     QPixmap m_arrPixmap[4];  
  22.     int m_iTypeTotal;  
  23.     int m_iType;  
  24. };  
  25. #endif // MYBUTTON_H  

 

mybutton.cpp

[cpp] view plaincopy
  1. /*/////////////////////////////////////////////////////////////// 
  2. 2011年。写于日本地震前几天。。。。 
  3. 作者CK。。。 
  4. QQ:78961410.. 
  5. 老婆淘宝:yoyock.taobao.com - -.... 
  6. ///////////////////////////////////////////////////////////////*/  
  7.   
  8. #include "mybutton.h"  
  9. #include <QPainter>  
  10. MyButton::MyButton(QWidget* parent,QString str1,QString str2,QString str3,QString str4) :  
  11.     QAbstractButton(parent)  
  12.     ,m_iTypeTotal(0)  
  13.     ,m_iType(1)  
  14. {  
  15.     if(str1 != "")  
  16.     {  
  17.         m_arrPixmap[0] = QPixmap(str1);  
  18.         m_iTypeTotal++;  
  19.     }  
  20.     if(str2 != "")  
  21.     {  
  22.         m_arrPixmap[1] = QPixmap(str2);  
  23.         m_iTypeTotal++;  
  24.     }  
  25.     if(str3 != "")  
  26.     {  
  27.         m_arrPixmap[2] = QPixmap(str3);  
  28.         m_iTypeTotal++;  
  29.     }  
  30.     if(str4 != "")  
  31.     {  
  32.         m_arrPixmap[3] = QPixmap(str4);  
  33.         m_iTypeTotal++;  
  34.     }  
  35.     this->setGeometry(0,0,m_arrPixmap[0].width(),m_arrPixmap[0].height());  
  36. }  
  37. void MyButton::paintEvent(QPaintEvent * e )  
  38. {  
  39.     if(this->isDown())  
  40.         m_iType = 3;  
  41.   
  42.     if(!this->isEnabled())  
  43.         m_iType = 4;  
  44.   
  45.     QPainter painter(this);  
  46.     switch(m_iTypeTotal)  
  47.     {  
  48.     case 1:  
  49.         {  
  50.             painter.drawPixmap(0,0,m_arrPixmap[0]);  
  51.         }  
  52.         break;  
  53.     case 2:  
  54.         {  
  55.             if(m_iType == 2)  
  56.                 painter.drawPixmap(0,0,m_arrPixmap[2]);  
  57.             else  
  58.                 painter.drawPixmap(0,0,m_arrPixmap[0]);  
  59.         }  
  60.         break;  
  61.     case 3:  
  62.         {  
  63.             if(m_iType <=3 )  
  64.             painter.drawPixmap(0,0,m_arrPixmap[m_iType-1]);  
  65.             else  
  66.                 painter.drawPixmap(0,0,m_arrPixmap[0]);  
  67.         }  
  68.         break;  
  69.     case 4:  
  70.         {  
  71.             painter.drawPixmap(0,0,m_arrPixmap[m_iType-1]);  
  72.         }  
  73.         break;  
  74.     }  
  75. }  
  76. void MyButton::enterEvent(QEvent * e)  
  77. {  
  78.     m_iType = 2;  
  79.     update();  
  80. }  
  81.   
  82. void MyButton::leaveEvent(QEvent * e)  
  83. {  
  84.     m_iType = 1;  
  85.     update();  
  86. }  

 

main.cpp

[cpp] view plaincopy
  1. #include <QtGui/QApplication>  
  2. #include "mainwindow.h"  
  3. #include<QtGui>  
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     MainWindow w;  
  8.     w.setGeometry(QApplication::desktop()->availableGeometry());  
  9.     w.show();  
  10.     return a.exec();  
  11. }  

image/bottomcentre.png

 

image/bottomleft.png

 

image/bottomright.png

 

image/left.png

 

image/leftdecorate.png

 

image/right.png

 

image/topcentre.png

 

image/topleft.png

 

image/topright.png

 

image/button/close_1.png

 

image/button/close_2.png

 

image/button/close_3.png

 

image/button/close_4.png

 

image/button/max_1.png

 

image/button/max_2.png

 

image/button/max_3.png

 

image/button/max_4.png

 

image/button/min_1.png

 

image/button/min_2.png

 

image/button/min_3.png

 

image/button/min_4.png

 

image/button/win_1.png

 

image/button/win_2.png

 

image/button/win_3.png

 

image/button/win_4.png

 

程序编译运行后如下效果。。

 

 

窗口可放大缩小,也可以移动。也可以双击放大和缩小!

 

0 0
原创粉丝点击