客户端源码:
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是如下:
virtual void paintEvent(QPaintEvent *event);
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_OBJECT
public:
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 )
{
// 结束dragging
m_dragging = false;
}