这一教程我们来做一个好看的窗口界面。。。
开发工具Qt Creator + qt 4.7 可到http://qt.nokia.com/downloads 下载LGPL和对应你所用的系统的那个版本。。
mainwindow.h
- /*///
- 2011年。写于日本地震前几天。。。。
- 作者CK。。。
- QQ:78961410..
- 老婆淘宝:yoyock.taobao.com - -....
- ///*/
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- class MyButton;
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
- protected:
- virtual void paintEvent(QPaintEvent * event);
- virtual void resizeEvent(QResizeEvent * event);
- virtual void mouseMoveEvent(QMouseEvent *e);
- virtual void mousePressEvent(QMouseEvent *e);
- virtual void mouseReleaseEvent(QMouseEvent *e);
- virtual void mouseDoubleClickEvent(QMouseEvent *e);
- private:
- QPixmap m_TopLeftPix;
- QPixmap m_TopRightPix;
- QPixmap m_TopCentrePix;
- QPixmap m_BottomLeftPix;
- QPixmap m_BottomRightPix;
- QPixmap m_BottomCentrePix;
- QPixmap m_LeftPix;
- QPixmap m_RightPix;
- QPixmap m_LeftDecoratePix;
- MyButton *m_pCloseBtn;
- MyButton *m_pMinBtn;
- MyButton *m_pMaxBtn;
- MyButton *m_pWinBtn;
- bool m_bIsMaxSize;
- QPoint m_last;
- QPoint m_pos0;
- QPoint m_last2;
- signals:
- public slots:
- void minsize();
- void maxsize();
- void winsize();
- void wclose();
- };
- #endif // MAINWINDOW_H
mainwindow.cpp
- /*///
- 2011年。写于日本地震前几天。。。。
- 作者CK。。。
- QQ:78961410..
- 老婆淘宝:yoyock.taobao.com - -....
- ///*/
- #include "mainwindow.h"
- #include "mybutton.h"
- #include <QPainter>
- #include <QtGui>
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent)
- ,m_bIsMaxSize(true)
- {
- setWindowState(Qt::WindowNoState);
- setWindowFlags( Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint );
- m_TopLeftPix = QPixmap(QString("image/topleft.png"));
- m_TopRightPix = QPixmap(QString("image/topright.png"));
- m_TopCentrePix = QPixmap(QString("image/topcentre.png"));
- m_BottomLeftPix = QPixmap(QString("image/bottomleft.png"));
- m_BottomRightPix = QPixmap(QString("image/bottomright.png"));
- m_BottomCentrePix = QPixmap(QString("image/bottomcentre.png"));
- m_LeftPix = QPixmap(QString("image/left.png"));
- m_RightPix = QPixmap(QString("image/right.png"));
- m_LeftDecoratePix = QPixmap(QString("image/leftdecorate.png"));
- m_pCloseBtn = new MyButton(this,QString("image/button/close_1.png"),
- QString("image/button/close_2.png"),
- QString("image/button/close_3.png"),
- QString("image/button/close_4.png"));
- m_pMinBtn = new MyButton(this,QString("image/button/min_1.png"),
- QString("image/button/min_2.png"),
- QString("image/button/min_3.png"),
- QString("image/button/min_4.png"));
- m_pMaxBtn = new MyButton(this,QString("image/button/max_1.png"),
- QString("image/button/max_2.png"),
- QString("image/button/max_3.png"),
- QString("image/button/max_4.png"));
- m_pWinBtn = new MyButton(this,QString("image/button/win_1.png"),
- QString("image/button/win_2.png"),
- QString("image/button/win_3.png"),
- QString("image/button/win_4.png"));
- m_pMaxBtn->hide();
- connect(m_pMinBtn, SIGNAL(clicked()),this,SLOT(minsize()));
- connect(m_pMaxBtn, SIGNAL(clicked()),this,SLOT(maxsize()));
- connect(m_pWinBtn, SIGNAL(clicked()),this,SLOT(winsize()));
- connect(m_pCloseBtn, SIGNAL(clicked()),this,SLOT(wclose()));
- }
- MainWindow::~MainWindow()
- {
- }
- void MainWindow::paintEvent(QPaintEvent * event)
- {
- QPainter painter(this);
- painter.drawPixmap(5,0,this->width()-10,m_TopCentrePix.height(),m_TopCentrePix);
- painter.drawPixmap(0,5,m_LeftPix.width(),height()-10,m_LeftPix);
- painter.drawPixmap(width()- m_RightPix.width(),5,m_RightPix.width(),height()-10,m_RightPix);
- painter.drawPixmap(5,this->height()-m_BottomCentrePix.height(),this->width()-10,m_BottomCentrePix.height(),m_BottomCentrePix);
- painter.drawPixmap(0,0,m_TopLeftPix);
- painter.drawPixmap(width()- m_TopRightPix.width(),0,m_TopRightPix);
- painter.drawPixmap(0,height() - m_BottomLeftPix.height(),m_BottomLeftPix);
- painter.drawPixmap(width()-m_BottomRightPix.width(),height() - m_BottomRightPix.height(),m_BottomRightPix);
- painter.drawPixmap(0,(height() - m_LeftDecoratePix.height())/2,m_LeftDecoratePix);
- }
- void MainWindow::resizeEvent(QResizeEvent * event)
- {
- m_pCloseBtn->move(width()-7-m_pCloseBtn->width(),16);
- m_pMaxBtn->move(m_pCloseBtn->x()-m_pMaxBtn->width(),16);
- m_pWinBtn->move(m_pMaxBtn->x(),16);
- m_pMinBtn->move(m_pWinBtn->x()-m_pMinBtn->width(),16);
- }
- void MainWindow::minsize()
- {
- showMinimized();
- }
- void MainWindow::maxsize()
- {
- m_pMaxBtn->hide();
- m_pWinBtn->show();
- setGeometry(QApplication::desktop()->availableGeometry());
- m_bIsMaxSize = !m_bIsMaxSize;
- }
- void MainWindow::winsize()
- {
- m_pMaxBtn->show();
- m_pWinBtn->hide();
- QRect rect = QApplication::desktop()->availableGeometry();
- int x = (rect.width()-800)/2;
- int y = (rect.height()-600)/2;
- setGeometry(x,y,800,600);
- m_bIsMaxSize = !m_bIsMaxSize;
- }
- void MainWindow::wclose()
- {
- this->close();
- }
- void MainWindow::mouseMoveEvent(QMouseEvent *e)
- {
- if ( (m_last2.x() == -1) || (m_last2.x() >= 0 && m_last2.x() <= width() && m_last2.y() >= 20 && m_last2.y() <= height())
- || m_bIsMaxSize)
- {
- return;
- }
- QPoint newpos = e->globalPos();
- QPoint upleft = m_pos0 + newpos - m_last;
- move(upleft);
- }
- void MainWindow::mousePressEvent(QMouseEvent *e)
- {
- this->m_last = e->globalPos();
- m_pos0 = e->globalPos() - e->pos();
- m_last2 = e->pos();
- }
- void MainWindow::mouseReleaseEvent(QMouseEvent *e)
- {
- m_last2.setX(-1);
- }
- void MainWindow::mouseDoubleClickEvent(QMouseEvent *e)
- {
- if(e->pos().y()<=20)
- {
- if(m_bIsMaxSize)
- {
- winsize();
- }
- else
- {
- maxsize();
- }
- }
- }
mybutton.h
- /*///
- 2011年。写于日本地震前几天。。。。
- 作者CK。。。
- QQ:78961410..
- 老婆淘宝:yoyock.taobao.com - -....
- ///*/
- #ifndef MYBUTTON_H
- #define MYBUTTON_H
- #include <QAbstractButton>
- #include <qpixmap>
- class MyButton : public QAbstractButton
- {
- Q_OBJECT
- public:
- explicit MyButton(QWidget* parent,QString str1,QString str2="",QString str3="",QString str4="");
- virtual void paintEvent(QPaintEvent * e);
- virtual void enterEvent(QEvent * e);
- virtual void leaveEvent(QEvent * e);
- private:
- //四张图片代表按钮的四个状态,1,默认状态。2,鼠标移动状态。3,鼠标按下状态,4,按钮不可用状态。
- QPixmap m_arrPixmap[4];
- int m_iTypeTotal;
- int m_iType;
- };
- #endif // MYBUTTON_H
mybutton.cpp
- /*///
- 2011年。写于日本地震前几天。。。。
- 作者CK。。。
- QQ:78961410..
- 老婆淘宝:yoyock.taobao.com - -....
- ///*/
- #include "mybutton.h"
- #include <QPainter>
- MyButton::MyButton(QWidget* parent,QString str1,QString str2,QString str3,QString str4) :
- QAbstractButton(parent)
- ,m_iTypeTotal(0)
- ,m_iType(1)
- {
- if(str1 != "")
- {
- m_arrPixmap[0] = QPixmap(str1);
- m_iTypeTotal++;
- }
- if(str2 != "")
- {
- m_arrPixmap[1] = QPixmap(str2);
- m_iTypeTotal++;
- }
- if(str3 != "")
- {
- m_arrPixmap[2] = QPixmap(str3);
- m_iTypeTotal++;
- }
- if(str4 != "")
- {
- m_arrPixmap[3] = QPixmap(str4);
- m_iTypeTotal++;
- }
- this->setGeometry(0,0,m_arrPixmap[0].width(),m_arrPixmap[0].height());
- }
- void MyButton::paintEvent(QPaintEvent * e )
- {
- if(this->isDown())
- m_iType = 3;
- if(!this->isEnabled())
- m_iType = 4;
- QPainter painter(this);
- switch(m_iTypeTotal)
- {
- case 1:
- {
- painter.drawPixmap(0,0,m_arrPixmap[0]);
- }
- break;
- case 2:
- {
- if(m_iType == 2)
- painter.drawPixmap(0,0,m_arrPixmap[2]);
- else
- painter.drawPixmap(0,0,m_arrPixmap[0]);
- }
- break;
- case 3:
- {
- if(m_iType <=3 )
- painter.drawPixmap(0,0,m_arrPixmap[m_iType-1]);
- else
- painter.drawPixmap(0,0,m_arrPixmap[0]);
- }
- break;
- case 4:
- {
- painter.drawPixmap(0,0,m_arrPixmap[m_iType-1]);
- }
- break;
- }
- }
- void MyButton::enterEvent(QEvent * e)
- {
- m_iType = 2;
- update();
- }
- void MyButton::leaveEvent(QEvent * e)
- {
- m_iType = 1;
- update();
- }
main.cpp
- #include <QtGui/QApplication>
- #include "mainwindow.h"
- #include<QtGui>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.setGeometry(QApplication::desktop()->availableGeometry());
- w.show();
- return a.exec();
- }
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
程序编译运行后如下效果。。
窗口可放大缩小,也可以移动。也可以双击放大和缩小!