看膩了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實作拖動,具體見代碼