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

    xiaoxiao2021-03-25  111

    客户端源码:

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

    转载请注明原文地址: https://ju.6miu.com/read-6712.html

    最新回复(0)