天天看點

Qt界面優化:Qt窗體控件設定Qt界面優化:Qt窗體控件設定一、效果圖二、使用步驟總結

Qt界面優化:Qt窗體控件設定

(文章目錄)

一、效果圖

1.滑鼠移動點選效果

Qt界面優化:Qt窗體控件設定Qt界面優化:Qt窗體控件設定一、效果圖二、使用步驟總結

2. Qt托盤效果

相信大家在使用QQ,微信,網易雲等應用時,會發現他們在關閉界面後,會最小化到右下方,生成一個小圖示,點選該圖示後,便又會彈出相關界面,此即為托盤效果。

如下圖所示,關閉界面後,所做軟體不會直接關閉,會在右下方生成一個小圖示,輕按兩下後,會重新打開該界面,右擊,會彈出菜單欄,可進行關閉、最大化和最小化等操作,同時,我也加入了一個彈窗按鈕,單擊該圖示,會彈出相關的通知,如下圖2所示。

Qt界面優化:Qt窗體控件設定Qt界面優化:Qt窗體控件設定一、效果圖二、使用步驟總結
Qt界面優化:Qt窗體控件設定Qt界面優化:Qt窗體控件設定一、效果圖二、使用步驟總結

二、使用步驟

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


           

總結

上一篇: LIST【2】
下一篇: Java--summary2