Qt工作笔记-Qt奇淫技巧把ToolBar改成标题栏
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-Qt奇淫技巧把ToolBar改成标题栏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
運行截圖如下:
這個是工具欄被改造成了標題欄,放大的時候,他也能正常顯示。
?
1.獲取屏幕分辨率;
2.重寫QToolBar;
3.自定義Label,用于鼠標移動上去造成不同的效果;
關鍵源碼如下:
1.獲取分辨率,設置toolBar的大小:
//設置窗口大小QRect screenRect=QApplication::desktop()->screenGeometry();setGeometry(100,100,screenRect.width()-100*2,screenRect.height()-100*2);ui->toolBar->setBarWidth(screenRect.width()-100*2);ui->toolBar->setBarMaxSize(screenRect.width());2.關于toolBar的相關代碼:
mytitlebar.h
#ifndef MYTITLEBAR_H #define MYTITLEBAR_H#include <QToolBar>class QLabel;class MyTitleBar : public QToolBar {Q_OBJECT public:MyTitleBar(QWidget *parent = 0);void setBarWidth(const int width);void setBarMaxSize(const int width);void ChangeTitleSize();void setTileLabel();signals:void prepareToDo(int flag);protected slots:void labelSignal(int flag);private:int m_width;int m_maxWidth;QLabel *titleLabel;bool titleIsChanged; };#endif // MYTITLEBAR_Hmytitlebar.cpp
#include "mytitlebar.h" #include "mylabel.h" #include "allmacro.h" #include <QLabel> #include <QDebug> #include <QGraphicsDropShadowEffect>MyTitleBar::MyTitleBar(QWidget *parent) : QToolBar(parent) {m_width=100;this->setMaximumHeight(33);titleIsChanged=false; }void MyTitleBar::setBarWidth(const int width) {m_width=width; }void MyTitleBar::setBarMaxSize(const int width) {m_maxWidth=width; }void MyTitleBar::ChangeTitleSize() {qDebug()<<titleIsChanged;if(!titleIsChanged){titleLabel->setFixedWidth(m_maxWidth-32*4.5);}else{titleLabel->setFixedWidth(m_width-32*4.5);}titleIsChanged=!titleIsChanged; }void MyTitleBar::setTileLabel() {//QLabel僅僅是提供測試QLabel *LogoLabel=new QLabel;LogoLabel->setPixmap(QPixmap(":/img/icon.png").scaled(32,32));this->addWidget(LogoLabel);titleLabel=new QLabel;titleLabel->setText(" 子區域負荷曲線配置");titleLabel->setFixedWidth(m_width-32*4.5);this->addWidget(titleLabel);MyLabel *minsizeLabel=new MyLabel(MinSize,":/img/minisize.png",":/img/minisize_hover.png");minsizeLabel->setPixmap(QPixmap(":/img/minisize.png"));this->addWidget(minsizeLabel);MyLabel *maxsizeLabel=new MyLabel(MaxSize,":/img/maxsize.png",":/img/maxsize_hover.png");maxsizeLabel->setPixmap(QPixmap(":/img/maxsize.png").scaled(32,32));this->addWidget(maxsizeLabel);MyLabel *closeLabel=new MyLabel(CloseMACRO,":/img/close.png",":/img/close_hover.png");closeLabel->setPixmap(QPixmap(":/img/close.png").scaled(32,32));this->addWidget(closeLabel);connect(minsizeLabel,SIGNAL(prepareToDo(int)),this,SLOT(labelSignal(int)));connect(maxsizeLabel,SIGNAL(prepareToDo(int)),this,SLOT(labelSignal(int)));connect(closeLabel,SIGNAL(prepareToDo(int)),this,SLOT(labelSignal(int)));QGraphicsDropShadowEffect *defaultShadow_LogoLabel = new QGraphicsDropShadowEffect();defaultShadow_LogoLabel->setBlurRadius(9.0);defaultShadow_LogoLabel->setColor(QColor(0, 0, 0, 160));defaultShadow_LogoLabel->setOffset(4.0);LogoLabel->setGraphicsEffect(defaultShadow_LogoLabel);QGraphicsDropShadowEffect *defaultShadow_titleLabel = new QGraphicsDropShadowEffect();defaultShadow_titleLabel->setBlurRadius(9.0);defaultShadow_titleLabel->setColor(QColor(0, 0, 0, 160));defaultShadow_titleLabel->setOffset(4.0);titleLabel->setGraphicsEffect(defaultShadow_titleLabel);}void MyTitleBar::labelSignal(int flag) {emit prepareToDo(flag); }對于自定義控件MyLabel的代碼
mylabel.h
#ifndef MYLABEL_H #define MYLABEL_H#include <QLabel>QT_BEGIN_NAMESPACE class QPixmap; QT_END_NAMESPACEclass MyLabel : public QLabel {Q_OBJECT public:MyLabel(QWidget *parent = 0);MyLabel(const int flag,const QString image,const QString image_hover,QWidget *parent=0);void getFlag(const int flag);protected:void paintEvent(QPaintEvent *event)Q_DECL_OVERRIDE;void enterEvent(QEvent *event)Q_DECL_OVERRIDE;void leaveEvent(QEvent *event)Q_DECL_OVERRIDE;void mouseReleaseEvent(QMouseEvent *event)Q_DECL_OVERRIDE;signals:void prepareToDo(int flag);private:int m_flag;QPixmap *m_image;QPixmap *m_image_hover;bool mouseIsHover; };#endif // MYLABEL_Hmylabel.cpp
#include "mylabel.h" #include <QPixmap> #include <QDebug> #include <QPaintEvent> #include <QPainter>MyLabel::MyLabel(QWidget *parent) : QLabel(parent) {m_flag=-1;this->setFixedSize(32,32); }MyLabel::MyLabel(const int flag, const QString image, const QString image_hover, QWidget *parent):QLabel(parent) {m_flag=flag;m_image=new QPixmap(image);m_image_hover=new QPixmap(image_hover);this->setFixedSize(32,32);mouseIsHover=false; }void MyLabel::getFlag(const int flag) {m_flag=flag; }void MyLabel::paintEvent(QPaintEvent *event) {Q_UNUSED(event)QPainter patiner(this);patiner.save();if(!mouseIsHover){patiner.drawPixmap(0,0,(*m_image).scaled(32,32));}else{patiner.drawPixmap(0,0,(*m_image_hover).scaled(32,32));}patiner.restore(); }void MyLabel::enterEvent(QEvent *event) {Q_UNUSED(event)mouseIsHover=true;update(); }void MyLabel::leaveEvent(QEvent *event) {Q_UNUSED(event)mouseIsHover=false;update(); }void MyLabel::mouseReleaseEvent(QMouseEvent *event) {Q_UNUSED(event)emit prepareToDo(m_flag); }mainWindow如何處理這些信號:
要有如下宏
#ifndef ALLMACRO_H #define ALLMACRO_H#define MinSize 0 #define MaxSize 1 #define CloseMACRO 2 #define AreaDefine 3 #define Candevice 4#endif // ALLMACRO_H?
然后進行這樣的處理:
void SubAreaCurve::labelToDoSth(int flag) {if(flag==CloseMACRO){this->close();}else if(flag==MaxSize){if(windowState()==Qt::WindowNoState){this->showMaximized();ui->toolBar->ChangeTitleSize();}else{showNormal();setWindowsSizeNormal();ui->toolBar->ChangeTitleSize();}}else if(flag==MinSize){this->showMinimized();} }?
總結
以上是生活随笔為你收集整理的Qt工作笔记-Qt奇淫技巧把ToolBar改成标题栏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt工作笔记-QCustomPlot让曲
- 下一篇: C++ opengl 绘制地面