大三软件工程小项目-小技术集合-客户端界面重画
生活随笔
收集整理的這篇文章主要介紹了
大三软件工程小项目-小技术集合-客户端界面重画
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
客戶端源碼:
http://download.csdn.net/detail/qq78442761/9768668
服務(wù)端源碼:
http://download.csdn.net/detail/qq78442761/9768662
我們在游戲登錄的時(shí)候,可以看見各種各樣炫酷的登錄界面。
其中一種最簡單的就是,ui設(shè)計(jì)師設(shè)計(jì)好的圖,然后把他弄成程序背景,再把標(biāo)題欄和邊框去掉。再重新寫鼠標(biāo)鍵盤事件。
就可以做一個(gè)簡單又比較好看的登錄界面了,
如下圖所示:
這個(gè)效果的做法,是這樣做的
這個(gè)登錄界面是在login.h和login.cpp控制的
我們在login.cpp里的構(gòu)造函數(shù)如下
Login::Login(QWidget *parent) :QWidget(parent),ui(new Ui::Login) {ui->setupUi(this);//取消標(biāo)題欄的顯示setWindowFlags(Qt::FramelessWindowHint);//背景透明setAttribute(Qt::WA_TranslucentBackground);m_backGroundImage=new QPixmap();m_backGroundImage->load(":/image/login.png");ui->UserlineEdit->setAlignment(Qt::AlignHCenter);ui->FBlineEdit->setAlignment(Qt::AlignCenter);m_dragging=false;connect(ui->RunGametoolButton,SIGNAL(clicked(bool)),this,SLOT(RunGame())); }我們可見下面就是關(guān)鍵步驟 ui->setupUi(this);//取消標(biāo)題欄的顯示setWindowFlags(Qt::FramelessWindowHint);//背景透明setAttribute(Qt::WA_TranslucentBackground);m_backGroundImage=new QPixmap();m_backGroundImage->load(":/image/login.png");
還有,因?yàn)椴僮飨到y(tǒng)要不同的畫窗口,這樣才能看見那個(gè)窗口
代碼如下:
void Login::paintEvent(QPaintEvent *event) {QPainter painter(this);QRect frameRect = rect();painter.drawPixmap(frameRect, *m_backGroundImage); } 其中painEvent是如下:
Qt對我們提供了方便的鼠標(biāo)事件。
我們現(xiàn)在來看login.h
#ifndef LOGIN_H #define LOGIN_H#include <QWidget> #include <QPixmap> #include <QPainter> #include <QRect> #include <QLabel> #include <QMouseEvent> #include <QPoint> #include <QMessageBox> #include "widget.h"namespace Ui { class Login; }class Login : public QWidget {Q_OBJECTpublic:explicit Login(QWidget *parent = 0);~Login();virtual void mouseMoveEvent ( QMouseEvent * event );virtual void mousePressEvent ( QMouseEvent * event );virtual void mouseReleaseEvent ( QMouseEvent * event ); public slots:void RunGame(); //運(yùn)行游戲private:Ui::Login *ui;virtual void paintEvent(QPaintEvent *event);QPixmap *m_backGroundImage;bool m_dragging; //判斷是否拖動QPoint m_startPosition; //拖動開始前的鼠標(biāo)位置QPoint m_framePosition; //窗體的原始位置Widget *gameWidget; //副本界面};#endif // LOGIN_H其中下面的代碼就是關(guān)鍵 virtual void mouseMoveEvent ( QMouseEvent * event );virtual void mousePressEvent ( QMouseEvent * event );virtual void mouseReleaseEvent ( QMouseEvent * event );
我們在login.cpp里面看看他的相關(guān)代碼: void Login::mousePressEvent(QMouseEvent *event) {// 只響應(yīng)左鍵if (event->button() == Qt::LeftButton){m_dragging = true;m_startPosition = event->globalPos();m_framePosition = frameGeometry().topLeft();}}void Login::mouseMoveEvent(QMouseEvent *event) {// 只響應(yīng)左鍵if (event->buttons() == Qt::LeftButton){if(m_dragging){// delta 相對偏移量,QPoint delta = event->globalPos() - m_startPosition;// 新位置:窗體原始位置 + 偏移量move(m_framePosition + delta);}}}void Login::mouseReleaseEvent ( QMouseEvent * event ) {// 結(jié)束draggingm_dragging = false; }
總結(jié)
以上是生活随笔為你收集整理的大三软件工程小项目-小技术集合-客户端界面重画的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flexigrid参数API
- 下一篇: 数据结构-树的进阶代码