看腻了QT俗气的界面,心里总想做个漂亮点的,于是捣腾了这么个小东西(上图...)
class Login : public QDialog
{
Q_OBJECT
public:
explicit Login(QWidget *parent = 0);
~Login();
private:
Ui::Login *ui;
QPoint dragVector; //鼠标拖动起始坐标
void initBackground();
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void closeEvent(QCloseEvent *event);
private slots:
void on_exit_clicked(); //退出按钮槽函数
void on_minimum_clicked(); //最小化按钮槽函数
void on_more_clicked(); //“更多'按钮槽函数
void on_login_clicked(); //登陆按钮槽函数
void on_sign_clicked(); //注册按钮槽函数
};
Login::Login(QWidget *parent) :
QDialog(parent),
ui(new Ui::Login)
{
ui->setupUi(this);
initBackground();
}
Login::~Login()
{
delete ui;
}
void Login::initBackground()
{
setWindowFlags(Qt::FramelessWindowHint); //去边框
setFixedSize(427,322); //固定面板大小
ui->more->setFlat(true); //”更多“按钮
ui->more->setToolTip(tr("更多"));
ui->more->setStyleSheet(tr("QPushButton:hover {background-image: url(:/resources/img/btn_back2.png);}"));
ui->minimum->setFlat(true); //”最小化“按钮
ui->minimum->setToolTip(tr("最小化"));
ui->minimum->setStyleSheet(tr("QPushButton:hover {background-image: url(:/resources/img/btn_back2.png);}"));
ui->exit->setFlat(true); //”退出“按钮
ui->exit->setToolTip(tr("退出"));
ui->exit->setStyleSheet(tr("QPushButton:hover {background-image: url(:/resources/img/btn_back2.png);}"));
ui->login->setFlat(true); //”登陆“按钮
ui->login->setToolTip(tr("登陆"));
ui->login->setStyleSheet(tr("QPushButton {background-image: url(:/resources/img/login_btn.jpg);}"));
ui->sign->setFlat(true); //”注册“按钮
ui->sign->setToolTip(tr("新用户注册"));
}
void Login::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
dragVector = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}
void Login::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() && Qt::LeftButton)
{
move(event->globalPos() - dragVector);
event->accept();
}
}
void Login::closeEvent(QCloseEvent *event)
{
done(QDialog::Rejected);
event->accept();
}
void Login::on_exit_clicked()
{
done(QDialog::Rejected);
}
void Login::on_minimum_clicked()
{
showMinimized();
}
void Login::on_more_clicked()
{
//显示更多配置选择
}
void Login::on_login_clicked()
{
}
void Login::on_sign_clicked()
{
//注册对话框
}
注意事项:
(1)对QPushButton进行了setFlat(true)之后,使用QSS方式设置按钮背景颜色将无效,只有鼠标点击时效果才会显示出来。
(2)将QDialog设置为无边框形式后将不能拖动,此时可以重写mousePressEvent后mouseMoveEvent实现拖动,具体见代码