QT自定义Tab标签页,可以删除、添加、修改和选中

2023-11-06

先看效果:
在这里插入图片描述
部分源码

#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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT自定义Tab标签页,可以删除、添加、修改和选中 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐