客户端源码:
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; }