26.QTableWidget用法

0 表格设置

 //设置表格的样式

    ui->tableWidget->verticalHeader()->hide();
    ui->tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignHCenter);//表头字体居中
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//单元格不可编辑
    ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(2,20,130);color: white;}");//设置表头背景和字体颜色
    ui->tableWidget->verticalHeader()->setDefaultSectionSize(40); //设置行高
    ui->tableWidget->horizontalHeader()->setStretchLastSection(true); //均分各列
    ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//列可扩展
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//设置整行选中
     //让tableWidget内容中的每个元素居中
    for (int i=0;i<5;i++)
       {
           for (int j=0;j<8;j++)
           {
               ui->tableWidget->item(i,j)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
           }
       }

1 添加 QCombox

//tablewidget中存储combox等
//	ui.tableWidget->setRowCount(0);//设置行数
	ui.tableWidget->setAlternatingRowColors(true); //设置隔行显示颜色
	ui.tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignHCenter);//表头字体居中
	//ui.tableWidget->horizontalHeader()->setStretchLastSection(true); //均分各列
	ui.tableWidget->resizeRowsToContents();
	ui.tableWidget->verticalHeader()->setHidden(true);
	//ui.tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color:rgb(40,143,218);font:8pt '宋体'};");


	int width = this->width() / 6;
    //设置列宽
	ui.tableWidget->setColumnWidth(0, width);
	ui.tableWidget->setColumnWidth(1, width);
	ui.tableWidget->setColumnWidth(2, width);
	ui.tableWidget->setColumnWidth(3, width);
	ui.tableWidget->setColumnWidth(4, this->width()-width*4);

添加QCombox

    int row = ui.tableWidget->rowCount();
	
	QComboBox * cb = new QComboBox;
	cb->addItem(QStringLiteral("xx1")); //0
	cb->addItem(QStringLiteral("xx2")); //1
	cb->addItem(QStringLiteral("xx3"));//2

    //插入一行
	ui.tableWidget->insertRow(row);
	ui.tableWidget->setCellWidget(row, 0, cb);

删除一行

int  row = ui.tableWidget->currentRow();
	if (row != -1)
	{
		ui.tableWidget->removeRow(row);
	}

2 取出QComboBox的值

QComboBox * cb_type = (QComboBox *)ui.tableWidget->cellWidget(i, 1); //类型

3 添加QCheckBox 方式一


		QCheckBox * cbox = new QCheckBox;

		int row = ui.tw_combat_unit->rowCount();

		ui.tw_combat_unit->insertRow(row);

		ui.tw_combat_unit->setItem(row, 0, new QTableWidgetItem(QString::fromStdString(name)));
		ui.tw_combat_unit->setCellWidget(row, 1, (QWidget *)cbox);

//单元格内容居中
		ui.tw_combat_unit->item(row, 0)->setTextAlignment(Qt::AlignCenter);

4 添加QCheckBox 方式二

QTableWidgetItem *check = new QTableWidgetItem("50%");
		check->setCheckState(Qt::Checked);
		

		QCheckBox * cbox = new QCheckBox;

		int row = ui.tw_target->rowCount();

		qDebug() << row;

		ui.tw_target->insertRow(row);

		ui.tw_target->setItem(row, 0, new QTableWidgetItem(QString::fromStdString(name)));
		//ui.tw_target->setCellWidget(row, 1, (QWidget *)cbox);
		ui.tw_target->setItem(row, 1, check);

		ui.tw_target->item(row, 0)->setTextAlignment(Qt::AlignCenter);

在这里插入图片描述

4 添加QCheckBox 方式3

QCheckbox 居中在单元格中显示,并且可以遍历访问

QCheckBox * cbox = new QCheckBox(this); //创建checkbox
		cbox->setCheckState(Qt::Checked); //设置状态
		QWidget * w = new QWidget(this);//创建一个widget
		QHBoxLayout * hLayout = new QHBoxLayout; //创建布局

		hLayout->addWidget(cbox);//添加checkbox
		hLayout->setMargin(0);//设置边缘距离
		hLayout->setAlignment(cbox, Qt::AlignCenter);//居中
		w->setLayout(hLayout);

		int row = ui.tw_combat_unit->rowCount();

		ui.tw_combat_unit->insertRow(row);

		ui.tw_combat_unit->setItem(row, 0, new QTableWidgetItem(QString::fromStdString(name)));
		ui.tw_combat_unit->setCellWidget(row, 1, w); //将widget放到table中

		ui.tw_combat_unit->item(row, 0)->setTextAlignment(Qt::AlignCenter);

遍历访问QCheckBox

//对数据进行设置
	for (int i = 0; i < ui.tw_target->rowCount(); i++)
	{
		QWidget * w = ui.tw_target->cellWidget(i, 1);
		QCheckBox * cb = (QCheckBox*)w->children().at(1);
		if (cb)
		{
			if (cb->checkState() == Qt::Checked)
			{
				qDebug() << "checked.";
			}
		}
	}

在这里插入图片描述

5 删除表格中所有的行

	while(ui.tw_mission_seq->rowCount() > 0)
	{
		int row = ui.tw_mission_seq->rowCount();
		if (row > 0)
		{
			ui.tw_mission_seq->removeRow(row-1);
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

guangshui516

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

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

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

打赏作者

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

抵扣说明:

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

余额充值