在主窗口中,除了自带的一个主工具栏,还可以在其他位置放置自定义的QToolBar.但是你会发现,ui页面的mainToolBar的初始位置只能是上下左右四个位置,这里说的是初始位置,因为只要设置了floatable和movetable这两个属性,就可以拖动到指定位置,但如果要实现初始就要在某一特定位置的话,只能够重新定义一个工具栏.
//"c.cpp"内的代码:
#include "c.h"
c::c(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
this->setBaseSize(QSize(1000,800));
QLayout *layout = this->layout();
//初始化各个工具按钮,不用细看,只要知道工具栏中可以放部件和QAction即可.
m_bottomToolBar = new QToolBar(); m_bottomToolBar->setFixedSize(750, 50);
m_boostButton = new QToolButton(); m_boostButton->setIcon(QIcon("Resources/Icons/boost.ico")); m_boostButton->setFixedSize(50, 50);
m_reduceButton = new QToolButton(); m_reduceButton->setIcon(QIcon("Resources/Icons/reduce.ico")); m_reduceButton->setFixedSize(50, 50);
m_sizeHintButton = new QToolButton(); m_sizeHintButton->setIcon(QIcon("Resources/Icons/sizeHint.ico")); m_sizeHintButton->setFixedSize(50, 50);
m_beautiButton = new QToolButton(); m_beautiButton->setIcon(QIcon("Resources/Icons/beauti.ico")); m_beautiButton->setFixedSize(75, 50); m_beautiButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); m_beautiButton->setText(QString::fromLocal8Bit("美化"));
m_cutScreenButton = new QToolButton(); m_cutScreenButton->setIcon(QIcon("Resources/Icons/cutScreen.ico")); m_cutScreenButton->setFixedSize(75, 50); m_cutScreenButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); m_cutScreenButton->setText(QString::fromLocal8Bit("截图"));
m_preciousButton = new QToolButton(); m_preciousButton->setIcon(QIcon("Resources/Icons/precious.ico")); m_preciousButton->setFixedSize(75, 50);
m_nextButton = new QToolButton(); m_nextButton->setIcon(QIcon("Resources/Icons/next.ico")); m_nextButton->setFixedSize(75, 50);
m_leftRotateButton = new QToolButton(); m_leftRotateButton->setIcon(QIcon("Resources/Icons/leftRotate.ico")); m_leftRotateButton->setFixedSize(75, 50);
m_rightRotateButton = new QToolButton(); m_rightRotateButton->setIcon(QIcon("Resources/Icons/rightRotate.ico")); m_rightRotateButton->setFixedSize(75, 50);
m_delButton = new QToolButton(); m_delButton->setIcon(QIcon("Resources/Icons/clean.ico")); m_delButton->setFixedSize(50, 50);
m_moreButton = new QToolButton(); m_moreButton->setIcon(QIcon("Resources/Icons/more.ico")); m_moreButton->setFixedSize(50, 50);
//把工具按钮加到工具栏中...
m_bottomToolBar->addWidget(m_boostButton);
m_bottomToolBar->addWidget(m_reduceButton);
m_bottomToolBar->addWidget(m_sizeHintButton);
m_bottomToolBar->addWidget(m_beautiButton);
m_bottomToolBar->addWidget(m_cutScreenButton);
//加入间隔线.
m_bottomToolBar->addSeparator();
m_bottomToolBar->addWidget(m_preciousButton);
m_bottomToolBar->addWidget(m_nextButton);
m_bottomToolBar->addSeparator();
m_bottomToolBar->addWidget(m_leftRotateButton);
m_bottomToolBar->addWidget(m_rightRotateButton);
m_bottomToolBar->addWidget(m_delButton);
m_bottomToolBar->addWidget(m_moreButton);
//设置菜单栏无法被移动.
m_bottomToolBar->setMovable(false);
//设置工具栏的几何属性,位置和宽高.
m_bottomToolBar->setGeometry(100, 700, 750, 50);
layout->addWidget(m_bottomToolBar);
//此处这句代码可有可无.
//this->setLayout(layout);
}
c::~c()
{
}
至于美图看看中的工具栏是在鼠标经过那片区域时才显示的菜单,实现起来很简单,只需要重写QMouseEvent中的鼠标移动函数即可,当然需要先设置:this->setMouseTracking(true).如果不是主窗口的使用上个函数即可,但如果是在主窗口中,这还是不够的,还需要设置:ui.centralWidget->setMouseTracking(true);这样的话,只要鼠标在移动,而不关注是否点下左键还是右键,就会调用void mouseMoveEvent(QMouseEvent *event)这个函数了.
还有一点就是,每当窗口大小改变时,菜单大小基本是不变的,只是位置相对世界坐标改变了,而相对窗口是不变的,所以只要重写void resizeEvent(QResizeEvent *event)这个虚函数即可.每当窗口大小被改变时,调用这个函数.
//"c.h"内的代码:
#ifndef C_H
#define C_H
#include <QtWidgets/QMainWindow>
#include "ui_c.h"
#include <QToolBar>
#include <QToolButton>
#include <QLayout>
class c : public QMainWindow
{
Q_OBJECT
public:
c(QWidget *parent = 0);
~c();
private:
Ui::cClass ui;
QToolBar *m_bottomToolBar;
QToolButton *m_boostButton;
QToolButton *m_reduceButton;
QToolButton *m_sizeHintButton;
QToolButton *m_cutScreenButton;
QToolButton *m_beautiButton;
QToolButton *m_preciousButton;
QToolButton *m_nextButton;
QToolButton *m_leftRotateButton;
QToolButton *m_rightRotateButton;
QToolButton *m_delButton;
QToolButton *m_moreButton;
};
#endif // C_H