大三软件工程小项目-小技术集合-客户端界面重画

583 篇文章 128 订阅
36 篇文章 23 订阅

客户端源码:

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;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值