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