Qt软件开发文档8---登陆界面的绘制及其封装

1.登陆界面的绘制

绘制一个登陆界面很简单,直接上代码
signin.h

#ifndef SIGNIN_H
#define SIGNIN_H

#include <QDialog>
#include <QMouseEvent>
#include <QPixmap>
#include <QVBoxLayout>
#include <QStyle>
#include <QPainter>
#include <QPaintEvent>
#include <QHBoxLayout>
#include <QDebug>
#include <QFrame>

class SignIn : public QDialog
{
    Q_OBJECT

public:
    SignIn(QWidget *parent = 0);
    ~SignIn();

protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);

private:
    bool        mMoveing;
    QPoint      mMovePosition;

    void initPage();
public slots:
    void btnSignInClicked();
    void btnRegisterClicked();
    void btnForgetClicked();
};

#endif // SIGNIN_H

.cpp

#include "signin.h"
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QCheckBox>

SignIn::SignIn(QWidget *parent)
    : QDialog(parent)
{
    mMoveing=false;
    setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);//无边框  隐藏Top栏
    this->setFixedSize(660,393);
    this->setStyleSheet("border:1px solid #92C8E8; margin: 0,0,0,0;");

    initPage();
}

SignIn::~SignIn()
{

}
void SignIn::initPage()
{
    QVBoxLayout *mainLayout = new QVBoxLayout(this);
    mainLayout->setContentsMargins(0,0,0,0);
    QWidget *topWidget = new QWidget(this);
    topWidget->setStyleSheet("QWidget{border:1px solid #92C8E8; margin: 0px;background-color:white}"
                             "QPushButton{border:0px;margin:0px;}"
                             "QLabel{border:0px;margin:0px;}");
    topWidget->setMaximumHeight(60);
    //////////////////////////////////////////////
    /// \brief topHLayout
    //////////////////////////////////////////////
    QHBoxLayout *topHLayout = new QHBoxLayout(this);
    QLabel *labelIcon = new QLabel(this);
    labelIcon->setPixmap(QPixmap(":/img/logo_xuanzhong.png"));
    labelIcon->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
    QPushButton *btnClose = new QPushButton(this);
    btnClose->setMaximumSize(20,20);
    btnClose->setIcon(QIcon(":/img/guanbi.png"));
    QPushButton *btnMin = new QPushButton(this);
    btnMin->setMaximumSize(20,20);
    btnMin->setIcon(QIcon(":/img/suoxiao.png"));

    topHLayout->addWidget(labelIcon);
    topHLayout->addWidget(btnMin);
    topHLayout->addWidget(btnClose);
    topWidget->setLayout(topHLayout);


    //////////////////////////////////////////////
    /// \brief bottomWidget
    //////////////////////////////////////////////
    QWidget *bottomWidget = new QWidget(this);
    bottomWidget->setContentsMargins(0,0,0,0);
    bottomWidget->setStyleSheet("border:1px solid #92C8E8; background-color:#D6EFFB;");
    QVBoxLayout *bottomVLayout = new QVBoxLayout(bottomWidget);

    bottomVLayout->setAlignment(Qt::AlignCenter);


    QWidget *bottomCenterWidget = new QWidget(bottomWidget);
    bottomCenterWidget->setMaximumWidth(290);
    bottomCenterWidget->setMinimumHeight(250);
    bottomCenterWidget->setStyleSheet("QWidget{border:0px;}"
                                      "QLabel{color:#3F3A39;font-size:16px;font-family:楷体;}"
                                      "QLineEdit{border:1px solid #CBD2D5 ;height:32px;border-radius:6px;background:white;padding-left:5px;}"
                                      "QPushButton{border:0px;background:#F3A026;color:white;border-radius:6px;font-size:16px}");
    QVBoxLayout *bottomCenterLayout = new QVBoxLayout(bottomCenterWidget);

    QHBoxLayout *userLayout = new QHBoxLayout(bottomCenterWidget);
    userLayout->setAlignment(Qt::AlignRight);
    QLabel *user = new QLabel(bottomCenterWidget);
    user->setText(QString::fromLocal8Bit("帐号"));
    user->setMaximumWidth(32);
    QLineEdit *userLine = new QLineEdit(bottomCenterWidget);
    userLine->setMaximumWidth(230);
    userLayout->addWidget(user);
    userLayout->addWidget(userLine);

    QHBoxLayout *pwdLayout = new QHBoxLayout(bottomCenterWidget);
    pwdLayout->setAlignment(Qt::AlignRight);
    QLabel *pwd = new QLabel(bottomCenterWidget);
    pwd->setText(QString::fromLocal8Bit("密码"));
    pwd->setMaximumWidth(32);
    QLineEdit *pwdLine = new QLineEdit(bottomCenterWidget);
    pwdLine->setMaximumWidth(230);
    pwdLayout->addWidget(pwd);
    pwdLayout->addWidget(pwdLine);


    QHBoxLayout *checkLayout = new QHBoxLayout(bottomCenterWidget);
    checkLayout->setAlignment(Qt::AlignJustify);
    QCheckBox *checkBox = new QCheckBox(bottomCenterWidget);
    QLabel *checkLabel = new QLabel(bottomCenterWidget);
    checkLabel->setText(QString::fromLocal8Bit("保存用户信息"));
    checkLabel->setMaximumHeight(20);
    checkLayout->addWidget(checkBox);
    checkLayout->addWidget(checkLabel);

    QHBoxLayout *signInLayout = new QHBoxLayout(bottomCenterWidget);
    signInLayout->setAlignment(Qt::AlignRight);
    QPushButton *btnSignIn = new QPushButton(bottomCenterWidget);
    btnSignIn->setChecked(false);
    btnSignIn->setMinimumSize(230,38);
    btnSignIn->setText(QString::fromLocal8Bit("登陆"));
    signInLayout->addWidget(btnSignIn);

    QHBoxLayout *restoreLayout = new QHBoxLayout(bottomCenterWidget);
    restoreLayout->setAlignment(Qt::AlignRight);
    QPushButton *btnRegister = new QPushButton(bottomCenterWidget);
    btnRegister->setText(QString::fromLocal8Bit("用户注册"));
    btnRegister->setStyleSheet("QPushButton{border:0;background-color:transparent;color:#3F3A39;font-size:14px}"
                               "QPushButton:hover{color:#CBD2D5}");
    QLabel *labelV = new QLabel(bottomCenterWidget);
    labelV->setText(tr("|"));
    QPushButton *btnForget = new QPushButton(bottomCenterWidget);
    btnForget->setText(QString::fromLocal8Bit("忘记密码?"));
    btnForget->setStyleSheet("QPushButton{border:0;background-color:transparent;color:#3F3A39;font-size:14px}"
                             "QPushButton:hover{color:#CBD2D5;}");
    restoreLayout->addWidget(btnRegister);
    restoreLayout->addWidget(labelV);
    restoreLayout->addWidget(btnForget);

    bottomCenterLayout->addLayout(userLayout);
    bottomCenterLayout->addLayout(pwdLayout);
    bottomCenterLayout->addLayout(checkLayout);
    bottomCenterLayout->addLayout(signInLayout);
    bottomCenterLayout->addLayout(restoreLayout);

    bottomVLayout->addWidget(bottomCenterWidget);
    bottomWidget->setLayout(bottomVLayout);
    //////////////////////////////////////////////
    mainLayout->setSpacing(0);
    mainLayout->addWidget(topWidget);
    mainLayout->addWidget(bottomWidget);


    connect(btnClose,SIGNAL(clicked(bool)),this,SLOT(close()));
    connect(btnMin,SIGNAL(clicked(bool)),this,SLOT(lower()));
    connect(btnSignIn,SIGNAL(clicked(bool)),this,SLOT(btnSignInClicked()));
    connect(btnRegister,SIGNAL(clicked(bool)),this,SLOT(btnRegisterClicked()));
    connect(btnForget,SIGNAL(clicked(bool)),this,SLOT(btnForgetClicked()));
}

void SignIn::btnSignInClicked()
{
    qDebug()<<"signIn btn clicked";
}

void SignIn::btnRegisterClicked()
{
    qDebug()<<"register btn clicked";
}
void SignIn::btnForgetClicked()
{
    qDebug()<<"forget btn clicked";
}

//重写鼠标按下事件
void SignIn::mousePressEvent(QMouseEvent *event)
{
    mMoveing = true;
    mMovePosition = event->globalPos() - pos();
}

void SignIn::mouseMoveEvent(QMouseEvent *event)
{
    if (mMoveing && (event->buttons() && Qt::LeftButton))
    {
        move(event->globalPos()-mMovePosition);
        mMovePosition = event->globalPos() - pos();
    }
}
void SignIn::mouseReleaseEvent(QMouseEvent *event)
{
    mMoveing = false;
}

绘制效果
这里写图片描述
不做太多介绍
现要求整体部分需要多次调用,如下:
这里写图片描述

这时候需要我们将这部分抽出来,作为一个公共函数,参见全局变量的声明(http://blog.csdn.net/me_badman/article/details/69524655)
在别的函数里调用。

2.函数声明

.exe路径
这里写图片描述
这里写图片描述
写一个publicsign 函数 ,声明如下

#ifndef PUBLICSIGNIN_H
#define PUBLICSIGNIN_H

#include <QPixmap>
#include <QVBoxLayout>
#include <QStyle>
#include <QHBoxLayout>
#include <QDebug>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <qcoreapplication.h>

class PublicSignIn
{
public:
    PublicSignIn();

    static void InitPage(QWidget *parent,QWidget *bottomWidget){
        //获取到图片的路径
        QString runPath = QCoreApplication::applicationDirPath();
        QString iconPath = runPath + "/configure/icons/";
        QVBoxLayout *mainLayout = new QVBoxLayout(parent);
        mainLayout->setContentsMargins(0,0,0,0);
        QWidget *topWidget = new QWidget(parent);
        topWidget->setStyleSheet("QWidget{border:1px solid #92C8E8; margin: 0px;background-color:white}"
                                 "QPushButton{border:0px;margin:0px;}"
                                 "QLabel{border:0px;margin:0px;}");
        topWidget->setMaximumHeight(60);
        //////////////////////////////////////////////
        /// \brief topHLayout
        //////////////////////////////////////////////
        QHBoxLayout *topHLayout = new QHBoxLayout(parent);
        QLabel *labelIcon = new QLabel(parent);
        labelIcon->setPixmap(QPixmap(iconPath + "logo_xuanzhong.png"));
        labelIcon->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
        QPushButton *btnClose = new QPushButton(parent);
        btnClose->setMaximumSize(20,20);
        btnClose->setIcon(QIcon(iconPath + "guanbi.png"));
        QPushButton *btnMin = new QPushButton(parent);
        btnMin->setMaximumSize(20,20);
        btnMin->setIcon(QIcon(iconPath + "suoxiao.png"));

        topHLayout->addWidget(labelIcon);
        topHLayout->addWidget(btnMin);
        topHLayout->addWidget(btnClose);
        topWidget->setLayout(topHLayout);

        //////////////////////////////////////////////
        /// \brief bottomWidget
        //////////////////////////////////////////////
        bottomWidget->setContentsMargins(0,0,0,0);
        bottomWidget->setStyleSheet("border:1px solid #92C8E8; background-color:#D6EFFB;");

        mainLayout->setSpacing(0);
        mainLayout->addWidget(topWidget);
        mainLayout->addWidget(bottomWidget);

        parent->connect(btnClose,SIGNAL(clicked(bool)),parent,SLOT(close()));
        parent->connect(btnMin,SIGNAL(clicked(bool)),parent,SLOT(lower()));
    }
    static void InitBottomPage(QWidget *parent, QWidget *bottomWidget);
};


#endif // PUBLICSIGNIN_H

3.调用publicsignin.h

sign.cpp

#include "signin.h"
#include "../bin/Debug/configure/head/publicsignin.h"

SignIn::SignIn(QWidget *parent)
: QDialog(parent)
{
    mMoveing = false;
    setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);//无边框  隐藏Top栏

    this->setFixedSize(660, 393);
    this->setStyleSheet("border:1px solid #92C8E8; margin: 0,0,0,0;");
    QWidget *bottomWidget = new QWidget(this);
    PublicSignIn::InitBottomPage(this, bottomWidget);
    PublicSignIn::InitPage(this, bottomWidget);
}

SignIn::~SignIn()
{

}
void PublicSignIn::InitBottomPage(QWidget *parent, QWidget *bottomWidget)
{
    QVBoxLayout *bottomVLayout = new QVBoxLayout(bottomWidget);
    bottomVLayout->setAlignment(Qt::AlignCenter);
    QWidget *bottomCenterWidget = new QWidget(bottomWidget);
    bottomCenterWidget->setMaximumWidth(290);
    bottomCenterWidget->setMinimumHeight(250);
    bottomCenterWidget->setStyleSheet("QWidget{border:0px;}"
        "QLabel{color:#3F3A39;font-size:16px;font-family:楷体;}"
        "QLineEdit{border:1px solid #CBD2D5;height:32px;border-radius:6px;background:white;padding-left:5px;}"
        "QPushButton{border:0px;background:#F3A026;color:white;border-radius:6px;font-size:16px}");
    QVBoxLayout *bottomCenterLayout = new QVBoxLayout(bottomCenterWidget);

    QHBoxLayout *userLayout = new QHBoxLayout(bottomCenterWidget);
    userLayout->setAlignment(Qt::AlignRight);
    QLabel *user = new QLabel(bottomCenterWidget);
    user->setText(QString::fromLocal8Bit("帐号"));
    user->setMaximumWidth(32);
    QLineEdit *userLine = new QLineEdit(bottomCenterWidget);
    userLine->setMaximumWidth(230);
    userLayout->addWidget(user);
    userLayout->addWidget(userLine);

    QHBoxLayout *pwdLayout = new QHBoxLayout(bottomCenterWidget);
    pwdLayout->setAlignment(Qt::AlignRight);
    QLabel *pwd = new QLabel(bottomCenterWidget);
    pwd->setText(QString::fromLocal8Bit("密码"));
    pwd->setMaximumWidth(32);
    QLineEdit *pwdLine = new QLineEdit(bottomCenterWidget);
    pwdLine->setMaximumWidth(230);
    pwdLayout->addWidget(pwd);
    pwdLayout->addWidget(pwdLine);


    QHBoxLayout *checkLayout = new QHBoxLayout(bottomCenterWidget);
    checkLayout->setAlignment(Qt::AlignJustify);
    QCheckBox *checkBox = new QCheckBox(bottomCenterWidget);
    QLabel *checkLabel = new QLabel(bottomCenterWidget);
    checkLabel->setText(QString::fromLocal8Bit("保存用户信息"));
    checkLabel->setMaximumHeight(20);
    checkLayout->addWidget(checkBox);
    checkLayout->addWidget(checkLabel);

    QHBoxLayout *signInLayout = new QHBoxLayout(bottomCenterWidget);
    signInLayout->setAlignment(Qt::AlignRight);
    QPushButton *btnSignIn = new QPushButton(bottomCenterWidget);
    btnSignIn->setChecked(false);
    btnSignIn->setMinimumSize(230, 38);
    btnSignIn->setText(QString::fromLocal8Bit("登陆"));
    signInLayout->addWidget(btnSignIn);

    QHBoxLayout *restoreLayout = new QHBoxLayout(bottomCenterWidget);
    restoreLayout->setAlignment(Qt::AlignRight);
    QPushButton *btnRegister = new QPushButton(bottomCenterWidget);
    btnRegister->setText(QString::fromLocal8Bit("用户注册"));
    btnRegister->setStyleSheet("QPushButton{border:0;background-color:transparent;color:#3F3A39;font-size:14px}"
        "QPushButton:hover{color:#CBD2D5}");
    QLabel *labelV = new QLabel(bottomCenterWidget);
    labelV->setText("|");
    QPushButton *btnForget = new QPushButton(bottomCenterWidget);
    btnForget->setText(QString::fromLocal8Bit("忘记密码?"));
    btnForget->setStyleSheet("QPushButton{border:0;background-color:transparent;color:#3F3A39;font-size:14px}"
        "QPushButton:hover{color:#CBD2D5;}");
    restoreLayout->addWidget(btnRegister);
    restoreLayout->addWidget(labelV);
    restoreLayout->addWidget(btnForget);

    bottomCenterLayout->addLayout(userLayout);
    bottomCenterLayout->addLayout(pwdLayout);
    bottomCenterLayout->addLayout(checkLayout);
    bottomCenterLayout->addLayout(signInLayout);
    bottomCenterLayout->addLayout(restoreLayout);

    bottomVLayout->addWidget(bottomCenterWidget);
    bottomWidget->setLayout(bottomVLayout);
    //////////////////////////////////////////////
    parent->connect(btnSignIn, SIGNAL(clicked(bool)), parent, SLOT(btnSignInClicked()));
    parent->connect(btnRegister, SIGNAL(clicked(bool)), parent, SLOT(btnRegisterClicked()));
    parent->connect(btnForget, SIGNAL(clicked(bool)), parent, SLOT(btnForgetClicked()));
}
void SignIn::btnSignInClicked()
{
    qDebug() << "signIn btn clicked";
}

void SignIn::btnRegisterClicked()
{
    qDebug() << "register btn clicked";
}
void SignIn::btnForgetClicked()
{
    qDebug() << "forget btn clicked";
}

//重写鼠标按下事件
void SignIn::mousePressEvent(QMouseEvent *event)
{
    mMoveing = true;
    mMovePosition = event->globalPos() - pos();
}

void SignIn::mouseMoveEvent(QMouseEvent *event)
{
    if (mMoveing && (event->buttons() && Qt::LeftButton))
    {
        move(event->globalPos() - mMovePosition);
        mMovePosition = event->globalPos() - pos();
    }
}
void SignIn::mouseReleaseEvent(QMouseEvent *event)
{
    mMoveing = false;
}

4.封装

最后 将signin封装成dll 在主界面中调用即可

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值