先看效果:
部分源码
#pragma once
#include <QWidget>
#include <vector>
#include "ui_QtGuiTrapeTabBar.h"
#include "ITrapeTab.h"
#include "ITrapeTabAdd.h"
//梯形标签
class QtGuiOneTrape;
class QtGuiTrapeTabBar
: public QWidget
, public ITrapeTab
, public ITrapeTabAdd {
Q_OBJECT
public:
QtGuiTrapeTabBar(QWidget *parent = Q_NULLPTR);
~QtGuiTrapeTabBar();
private:
void init();
void closeOneTab(QWidget* btn)override;
void selectedOneTab(QWidget* btn)override;
void addTrapeTab()override;
private:
Ui::QtGuiTrapeTabBar ui;
std::vector<QtGuiOneTrape*> _guiOneTrapeList;
};
#include <QDebug>
#include <QMouseEvent>
#include "QtGuiTrapeTabBar.h"
#include "QtGuiOneTrapeDoubleClick.h"
#include "QtGuiTrapeAdd.h"
QtGuiTrapeTabBar::QtGuiTrapeTabBar(QWidget *parent)
: QWidget(parent) {
ui.setupUi(this);
this->setMouseTracking(true);//默认为false,在false的情况下只有点击了之后才可以追踪鼠标的移动
init();
}
QtGuiTrapeTabBar::~QtGuiTrapeTabBar() {
}
void QtGuiTrapeTabBar::init() {
QtGuiOneTrapeDoubleClick* trape1 = new QtGuiOneTrapeDoubleClick(this);
QtGuiOneTrapeDoubleClick* trape2 = new QtGuiOneTrapeDoubleClick(this);
QtGuiOneTrapeDoubleClick* trape3 = new QtGuiOneTrapeDoubleClick(this);
_guiOneTrapeList.push_back(trape1);
_guiOneTrapeList.push_back(trape2);
_guiOneTrapeList.push_back(trape3);
int num = _guiOneTrapeList.size();
for (int i = 0; i < num; i++) {
QtGuiOneTrape* oneTrape = _guiOneTrapeList.at(i);
ui.horizontalLayoutTab->addWidget(oneTrape);
}
QtGuiTrapeAdd* trapeAdd = new QtGuiTrapeAdd(this);
ui.horizontalLayoutAdd->addWidget(trapeAdd);
}
void QtGuiTrapeTabBar::closeOneTab(QWidget* tabBar) {
int num = _guiOneTrapeList.size();
for (int i = 0; i < num; i++) {
QtGuiOneTrape* oneTrape = _guiOneTrapeList.at(i);
if (tabBar == oneTrape) {
_guiOneTrapeList.erase(_guiOneTrapeList.begin() + i);
break;
}
}
tabBar->setParent(nullptr);//移除控件之前要置空
ui.horizontalLayoutTab->removeWidget(tabBar);
}
void QtGuiTrapeTabBar::selectedOneTab(QWidget* tabBar) {
QtGuiOneTrape*tabBarBtn = dynamic_cast<QtGuiOneTrape*>(tabBar);
int num = _guiOneTrapeList.size();
for (int i = 0; i < num; i++) {
QtGuiOneTrape* oneTrape = _guiOneTrapeList.at(i);
oneTrape->setSelected(false);
}
tabBarBtn->setSelected(true);
}
void QtGuiTrapeTabBar::addTrapeTab() {
QtGuiOneTrapeDoubleClick* trape1 = new QtGuiOneTrapeDoubleClick(this);
_guiOneTrapeList.push_back(trape1);
ui.horizontalLayoutTab->addWidget(trape1);
}
如需要源码,请私信
aaa