qt 应用笔记

一、QTablewidget

在Qt 5.6.3版本中,QTableWidget类是一个继承自QWidget的小部件类,用于显示二维表格数据。它提供了许多公共接口,以便在运行时使用。以下是QTableWidget的所有公有接口及其用途的简要描述:

构造函数

  • QTableWidget(QWidget *parent = nullptr):构造一个空的QTableWidget小部件。
  • QTableWidget(int rows, int columns, QWidget *parent = nullptr):构造一个具有指定行数和列数的QTableWidget小部件。

数据操作

  • setRowCount(int count):设置表格的行数。
  • setColumnCount(int count):设置表格的列数。
  • setHorizontalHeaderLabels(const QStringList &labels):设置表格的水平表头标签。
  • setVerticalHeaderLabels(const QStringList &labels):设置表格的垂直表头标签。
  • setItem(int row, int column, QTableWidgetItem *item):在给定的行和列位置设置一个表格项。
  • item(int row, int column) const:获取给定位置的表格项。
  • takeItem(int row, int column):从给定位置删除表格项,并返回该项。
  • clear():清空表格中所有的内容。

数据查询

  • rowCount() const:获取表格的行数。
  • columnCount() const:获取表格的列数。
  • horizontalHeaderItem(int column) const:获取水平表头给定列的表头项。
  • verticalHeaderItem(int row) const:获取垂直表头给定行的表头项。
  • itemAt(int x, int y) const:获取给定坐标位置的表格项。
  • findItems(const QString &text, Qt::MatchFlags flags) const:在表格中查找包含给定文本的所有表格项。

样式和行为

  • setEditTriggers(QAbstractItemView::EditTriggers triggers):设置编辑表格时的触发事件。
  • setSelectionMode(QAbstractItemView::SelectionMode mode):设置选择模式。
  • setAlternatingRowColors(bool enable):设置交替行颜色是否启用。
  • setSortingEnabled(bool enable):设置表格是否启用排序。

信号与槽

  • cellClicked(int row, int column):当单元格被单击时发出信号。
  • cellDoubleClicked(int row, int column):当单元格被双击时发出信号。
  • itemSelectionChanged():当选择项发生更改时发出信号。
    以上仅是QTableWidget的一些公共接口,还有其他的接口和方法可供使用。可以参考官方文档以获取更详细的信息和用法示例。

1.6 批量添加QTablewidget 的右键菜单

void MyClass::setTable(TableSetting_t &tst)
{
    tst.TWidget->setSelectionBehavior (QAbstractItemView::SelectRows);//选中则选中整行
    tst.TWidget->setSelectionMode (QAbstractItemView::SingleSelection);/选择模式为单行选择
    tst.TWidget->setContextMenuPolicy (Qt::CustomContextMenu);//添加右键菜单策略
	auto clearMenu = new QMenu(this);
	/*右键菜单*/
	connect(tst.TWidget, &QTableWidget::customContextMenuRequested, this, [=](const QPoint &pos){
		clearMenu->clear();
		clearMenu->addAction(QIcon(":/Icons/clear_symbol.ico"), tr("Clear Screen"), this, [=](){
			for (int row = 0; row < tst.TWidget->rowCount(); row++)
			{
				for (int col = 0; col < tst.TWidget->columnCount(); col++)
				{
					if (tst.TWidget->item(row, col))
					{
						tst.TWidget->item(row, col)->setText("");
					}
				}
			}
		});
		clearMenu->exec(QCursor::pos());
	});
}

二、QTableWidgetItem

此枚举描述item的属性

ConstantValueDescription
Qt::NoItemFlags0不设置任何属性。
Qt::ItemIsSelectable1是否可选择。
Qt::ItemIsEditable2是否可编辑。
Qt::ItemIsDragEnabled4拖拽使能。
Qt::ItemIsDropEnabled8是否可放置使能。
Qt::ItemIsUserCheckable16用户可以选中或取消选中它。
Qt::ItemIsEnabled32item是否使能。
Qt::ItemIsAutoTristate64项目的状态取决于其子项的状态。这样可以自动管理 QTreeWidget 中父项的状态(如果选中所有子项,则选中,如果未选中所有子项,则取消选中,如果仅选中部分子项,则部分选中)。
Qt::ItemNeverHasChildren128该项永远不会有子项。这仅用于优化目的。
Qt::ItemIsUserTristate256用户可以循环浏览三种不同的状态。此值是在 Qt 5.5 中添加的。

请注意,需要为Checkable item提供一组合适的标志和初始状态,指示项目是否已选中。也就是说,当你需要item显示复选框时,你需要指定它是选中还是未选中状态;

//ui->tableWidget->item(row, col)->setCheckState ( Qt::checked);或者
ui->tableWidget->item(row, col)->setCheckState ( Qt::Unchecked);

请注意,如果索引设置了 Qt::ItemNeverHasChildren 标志,则重新实现 QAbstractItemModel::hasChildren 以返回索引的 true 是未定义的行为。

itemFlags 类型是 QFlags 的 typedef。它存储项目标志值的逻辑或组合。

三、QTreeWidget Class

qtreewiget 添加自定义菜单

3.1 添加菜单

void MyClass::SideBarTreeInit()
{   
	auto Root = new QTreeWidgetItem(ui->TreeWidget );
    ui->TreeWidget ->setContextMenuPolicy (Qt::CustomContextMenu);//添加自定义菜单策略
    auto menu1= new QMenu(tr("menu1"),this);//构造右击菜单1
    menu1->addAction(QIcon("iconPath1"),tr("actionName1"),this,&MyClass::onSlot1);//将action的触发事件与槽onSlot1绑定
//鼠标右击触发弹出菜单信号
    connect (ui->TreeWidget ,&QTreeWidget::customContextMenuRequested,[=](const QPoint &pos){
        if(ui->TreeWidget ->itemAt (pos)==nullptr)return;
        if(ui->TreeWidget ->itemAt (pos) == Root )
        {
            menu1->exec(QCursor::pos());//弹出右键菜单,菜单位置为光标位置
        }
    });
    ui->TreeWidget ->expandAll ();//将TreeWidget 的所有item展开
}

3.2 根据文本查找item

auto tops = ui->TreeWidget ->findItems (tr("finad text"),Qt::MatchRecursive);

此枚举描述在模型中搜索项时可以使用的匹配类型。

ConstantValueDescription
Qt::MatchExactly0执行基于 QVariant 的匹配。
Qt::MatchFixedString8执行基于字符串的匹配。基于字符串的比较不区分大小写,除非还指定了标志。MatchCaseSensitive
Qt::MatchContains1搜索词包含在项目中。
Qt::MatchStartsWith2搜索词与项目的开头匹配。
Qt::MatchEndsWith3搜索词与项目的末尾匹配。
Qt::MatchCaseSensitive16搜索区分大小写。
Qt::MatchRegularExpression4使用正则表达式作为搜索词执行基于字符串的匹配。使用 QRegularExpression。使用此标志时,QRegularExpression 对象可以作为参数传递,并将直接用于执行搜索。区分大小写标志将被忽略,因为 QRegularExpression 对象应已完全配置。此枚举值是在 Qt 5.15 中添加的。
Qt::MatchWildcard5使用带有通配符的字符串作为搜索词执行基于字符串的匹配。
Qt::MatchWrap32执行环绕搜索,以便当搜索到达模型中的最后一个项目时,它从第一项再次开始并继续,直到检查完所有项目。
Qt::MatchRecursive64搜索整个层次结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春意盎然的三月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值