列表控件列表表格树笔记

列表控件列表表格树笔记

目录

列表控件列表表格树笔记

QListWidget

QTableWidget

QTreeWidget

QListWidget

  • selecttionMode 单选多选(ExtendSelection常用)
  • flow 从上到下还是从左到右
  • gridSize 每一行的宽度
  • iconSize 图标的宽度
  • QListWidget插入数据
//清空界面设计器添加的数据
ui.listWidget->clear();

//插入数据的多种方法
QListWidgetItem *item1 = new QListWidgetItem;
item1->setText(QString::fromLocal8Bit("测试数据1"));
ui.listWidget->insertItem(0, item1);

new QListWidgetItem("test item 2 ", ui.listWidget);

ui.listWidget->addItem("test item 3");

//插入包含图标的数据
QListWidgetItem *itemIcon = new QListWidgetItem;
itemIcon->setText("test item icon 4");
itemIcon->setIcon(QIcon("test.jpg"));
ui.listWidget->addItem(itemIcon);
  •  遍历列表
//遍历列表
for (int i = 0; i < ui.listWidget->count(); i++)
{
	qDebug()<<ui.listWidget->item(i)->text();
}
  • 设置为可编辑状态
//设置为可编辑状态
//所有事件都激发编辑 双击 选择 选项变化
ui.listWidget->setEditTriggers(QAbstractItemView::AllEditTriggers);
for (int i = 0; i < ui.listWidget->count(); i++)
{
	ui.listWidget->item(i)->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
  • 排序
void QListWidgetTest::Sort()
{
	static bool isDesc = false;
	if (!isDesc)
	{
		ui.listWidget->sortItems(Qt::DescendingOrder);
	}
	else
	{
		ui.listWidget->sortItems(Qt::AscendingOrder);
	}
	isDesc = !isDesc;
}
  • 添加其他控件
//显示QLineEdit控件
QLineEdit *e = new QLineEdit("Test Line Edit");
ui.listWidget->setItemWidget(ui.listWidget->item(4), e);

//显示QSpinBox控件
QSpinBox *  s = new QSpinBox();
ui.listWidget->setItemWidget(ui.listWidget->item(5), s);

QTableWidget

  • 属性
    • 通过ui界面属性设置 
    • 在Header属性中设置最后一列是否拉伸填充,每列默认大小,最小宽度,是否排序,选中是否高亮。

  • 插入标题

  • 插入水平标题 
//清空所有标题和内容
ui.tableWidget->setColumnCount(0);
ui.tableWidget->setRowCount(0);
 
//插入水平标题
ui.tableWidget->setColumnCount(5);
ui.tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Head1"));
ui.tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem);
ui.tableWidget->horizontalHeaderItem(1)->setText("Head2");

ui.tableWidget->setHorizontalHeaderItem(2, new MyHead("H3"));
//插入标题,会清理之前的对象
ui.tableWidget->setHorizontalHeaderItem(2, new MyHead("Head3"));

ui.tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Head4"));
ui.tableWidget->setHorizontalHeaderItem(4, new QTableWidgetItem("Head5"));
  • 插入垂直标题
//设定标题列的宽度
ui.tableWidget->setColumnWidth(0, 200);

//设置垂直标题
ui.tableWidget->setRowCount(3);
QStringList list = { "row1","row2","row3" };
//list.push_back("col1");
ui.tableWidget->setVerticalHeaderLabels(list);
  • 插入数据

 

  •  插入数据
//插入数据
ui.tableWidget->setItem(0, 0, new QTableWidgetItem("col 0,0"));
ui.tableWidget->setItem(0, 1, new QTableWidgetItem("col 0,1"));
ui.tableWidget->setItem(0, 2, new QTableWidgetItem("col 0,2"));
ui.tableWidget->setItem(1, 0, new QTableWidgetItem("col 1,0"));
ui.tableWidget->setItem(2, 0, new QTableWidgetItem("col 2,0"));
  • 超过设置的setRowCount(3)数,使用insert添加行
//结尾添加一行
int row = ui.tableWidget->rowCount();
ui.tableWidget->insertRow(row);
ui.tableWidget->setItem(row, 0, new QTableWidgetItem("new row 4"));

//开始添加一行
ui.tableWidget->insertRow(0);
ui.tableWidget->setItem(0, 0, new QTableWidgetItem("new row 0"));
  • 插入QIcon 图片
ui.tableWidget->setItem(0, 1, new QTableWidgetItem("new row 1"));
ui.tableWidget->item(0, 1)->setIcon(QIcon("test.jpg"));
//设置行高
ui.tableWidget->setRowHeight(0,80);
//设置图标显示大小
ui.tableWidget->setIconSize(QSize(ui.tableWidget->rowHeight(0), ui.tableWidget->rowHeight(0)));
  • 插入widget 图片
QLabel *img = new QLabel();
QPixmap pix("test.jpg");
//缩放到和表格单元的宽高一致
pix = pix.scaled(ui.tableWidget->columnWidth(0),ui.tableWidget->rowHeight(row));
img->setPixmap(pix);
ui.tableWidget->setCellWidget(row, 0, img);
  • 数据删除
void QTableWidgetTest::Del()
{
	//空行无法选择
	QList<QTableWidgetItem*> items = ui.tableWidget->selectedItems();
	for (int i = 0; i < items.size(); i++)
	{
		qDebug() <<items[i]->row()<<":"<<items[i]->column()<<" text="<< items[i]->text();
	}
	//选择模式器
	QItemSelectionModel *smodel = ui.tableWidget->selectionModel();
	//获取所有的选择索引
	QModelIndexList slist = smodel->selectedIndexes();
	
	//获取所有被选中的行号
	std::set<int> rows;
	for (int i = 0; i < slist.size(); i++)
	{
		//重复的插入失败
		rows.insert(slist[i].row());
	}

	//给用户提示
	QString msg = QStringLiteral("您确认删除:");

	for (std::set<int>::iterator itr = rows.begin(); itr != rows.end(); itr++)
	{
		QTableWidgetItem *item = ui.tableWidget->item(*itr, 0);
		msg += "[";
		msg += QString::number(*itr+1);
		msg += ":";
		if (item)
			msg += item->text();
		msg += "]";
	}
	int re = QMessageBox::information(this, "", msg, QStringLiteral("确认"), QStringLiteral("取消"));
	if (re != 0)
	{
		return;
	}

	//删除多行
	for (;;)
	{
		//获取所有的选择索引
		QModelIndexList s = smodel->selectedIndexes();
		if (s.size() <= 0) break;
		//每次只删除一行
		ui.tableWidget->removeRow(s[0].row());
	}
}

QTreeWidget

  • 清理标题和数据
//清理测试的标题,不清理数据
//ui.treeWidget->setColumnCount(0); //不会清理
ui.treeWidget->setHeaderItem(new QTreeWidgetItem());

//清理测试数据
ui.treeWidget->clear();

//设置标题,设置四列
ui.treeWidget->headerItem()->setText(0, QStringLiteral("标题1"));
ui.treeWidget->headerItem()->setText(1, "head2");
ui.treeWidget->headerItem()->setText(2, "head3");
ui.treeWidget->headerItem()->setText(3, "head4");
//ui.treeWidget->headerItem()->setText(5, "head4");
qDebug() << "ColumnCount" << ui.treeWidget->columnCount();

  •  数据插入顶级节点
//结尾处插入
ui.treeWidget->addTopLevelItem(new QTreeWidgetItem());
ui.treeWidget->topLevelItem(0)->setText(0,"tree node1");
ui.treeWidget->topLevelItem(0)->setText(1, "tree node1 col2");

ui.treeWidget->addTopLevelItem(new QTreeWidgetItem({"tree node2 col1","tree node2 col2"}));
//开头插入
ui.treeWidget->insertTopLevelItem(0, new QTreeWidgetItem({ "tree node1-1 col1","tree node1-1 col2" }));

//结尾插入
ui.treeWidget->insertTopLevelItem(ui.treeWidget->topLevelItemCount(), new QTreeWidgetItem({ "tree node end col1" }));

//结尾插入
QTreeWidgetItem *node = new QTreeWidgetItem(ui.treeWidget);
node->setText(0, "new ");
  • 子节点 操作

  •  插入图标
ui.treeWidget->setIconSize(QSize(60, 60));
ui.treeWidget->topLevelItem(0)->setIcon(0, QIcon("test.jpg"));
  • 插入Widget控件
QPushButton *bu = new QPushButton("Test");
ui.treeWidget->setItemWidget(ui.treeWidget->topLevelItem(1), 0, bu);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值