Qt界面優化:Qt窗體控件設定
(文章目錄)
一、效果圖
1.滑鼠移動點選效果
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SMxEzMxImZwMmNykjM4EjMzYzX4EDOyUTM0EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
2. Qt托盤效果
相信大家在使用QQ,微信,網易雲等應用時,會發現他們在關閉界面後,會最小化到右下方,生成一個小圖示,點選該圖示後,便又會彈出相關界面,此即為托盤效果。
如下圖所示,關閉界面後,所做軟體不會直接關閉,會在右下方生成一個小圖示,輕按兩下後,會重新打開該界面,右擊,會彈出菜單欄,可進行關閉、最大化和最小化等操作,同時,我也加入了一個彈窗按鈕,單擊該圖示,會彈出相關的通知,如下圖2所示。
二、使用步驟
1. 背景圖檔的添加
.h部分(添加到私有屬性中):
QLabel * bglabel;
.cpp部分:
//背景圖檔的添加
bglabel=ui->label;
bglabel ->setPixmap(QPixmap(":images//background.png"));//此處為你要添加的圖檔路徑
bglabel ->setScaledContents(true);
.cpp第二行為你要添加的圖檔的路徑,我這裡添加的路徑結果目錄為pro同級目錄中的images檔案中的background.png圖檔。
.ui界面:
将label控件添加到窗體中,右擊,選擇放到後面選項,即可實作背景的更改(如果添加的label被控件遮擋,需要将控件設定為透明,才可完全顯示出來)。
注:也可以通過更改樣式表來改變控件,如背景,字型顔色,漸變等,但背景添加效果與使用label,通過代碼來實作相比,略顯遜色。
2. 控件樣式的更改
Qt控件樣式的更改,可以通過兩種方法實作,一種為直接通過ui界面中右擊控件,選擇更改樣式表來實作控件顔色,背景,漸變,字型樣式,顔色等的更改。
還可以通過如下圖的代碼來實作相關的控件優化:
.cpp部分:
//控件的透明化
ui->tabWidget->setStyleSheet("background-color:rgba(0,0,0,0);");
//tabWidget為你想要修改的控件的名稱
//按鈕的美化
ui->pushButton->setStyleSheet(
//正常狀态樣式
"QPushButton{"
"background-color:#E4F2F8;"//設定按鈕背景色
"border-radius:10px;"//設定圓角半徑
"}"
"QPushButton:hover{"
"background-color:#999999;"//設定按鈕點選時的背景顔色
"color:white;"
"}");
//設定字型顔色
3. Qt窗體透明化
.cpp部分:
setWindowOpacity(0.85); //0.85為透明度所占比,數字越小,透明度越低
4. Qt托盤的添加
.h部分:
private:
QSystemTrayIcon *SysIcon;
QAction *min; //最小化
QAction *max; //最大化
QAction *restor; //恢複
QAction *quit; //退出
QMenu *menu;
void closeEvent(QCloseEvent * event);
public slots:
void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);
.cpp部分
//托盤
menu = new QMenu(this);
menu->setStyleSheet("background-color:rgba(255,255,255);");
QIcon icon(":images//CalenderLogo.png");
SysIcon = new QSystemTrayIcon(this);
SysIcon->setIcon(icon);
SysIcon->setToolTip("YXSmarter");
min = new QAction("視窗最小化",this);
connect(min,&QAction::triggered,this,&MainWindow::hide);
max = new QAction("視窗最大化",this);
connect(max,&QAction::triggered,this,&MainWindow::showMaximized);
restor = new QAction("恢複原來的樣子",this);
connect(restor,&QAction::triggered,this,&MainWindow::showNormal);
quit = new QAction("退出",this);
connect(quit,&QAction::triggered,qApp,&QApplication::quit);
connect(SysIcon,&QSystemTrayIcon::activated,this,&MainWindow::on_activatedSysTrayIcon);
menu->addAction(min);
menu->addAction(max);
menu->addAction(restor);
menu->addSeparator(); //分割
menu->addAction(quit);
SysIcon->setContextMenu(menu);
SysIcon->show();
close();
函數實作部分
void MainWindow::closeEvent(QCloseEvent * event){ //關閉事件
if(SysIcon->isVisible())
{
this->hide();
event->ignore();
}
else {
event->accept();
}
}
void MainWindow::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
{ //對托盤中的菜單項的事件處理
switch (reason) {
case QSystemTrayIcon::Trigger:
SysIcon->showMessage("YXSmarter","歡迎使用雲曦智劃!");
break;
case QSystemTrayIcon::DoubleClick:
this->show();
break;
default:
break;
}
}
5. Qt去邊框的添加
.cpp部分
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint);
窗體可拖動
.h部分:
private:
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
QPoint z;
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
QWidget::mouseMoveEvent(event);
QPoint y =event->globalPos(); //滑鼠相對于桌面左上角的位置,滑鼠全局位置
QPoint x =y-this->z;
this->move(x);
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
QPoint y =event->globalPos(); //滑鼠相對于桌面左上角,滑鼠全局位置
QPoint x =this->geometry().topLeft(); //視窗左上角相對于桌面位置,視窗位置
this-> z =y-x ;//定值不變
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
QWidget::mouseReleaseEvent(event);
this->z=QPoint();
}