Qt QTableWidget某列为删除和添加按钮,点击删除当前行,点击添加添加一行。

实现:Qt QTableWidget某列为删除和添加按钮,点击删除当前行,点击添加添加一行。

一、运行效果图

QTableWidget.wmv

二、源码

1.头文件

#pragma once

#include <QWidget>
#include "ui_QtableWidgetNB.h"

class QtableWidgetNB : public QWidget
{
	Q_OBJECT

public:
	QtableWidgetNB(QWidget *parent = Q_NULLPTR);
	~QtableWidgetNB();
	void addRow(QString & name);
	void removeRow(int nRow);

public slots:
	void sltBtnAddClicked();
	void sltBtnDeleteClicked();

private:
	Ui::QtableWidgetNB ui;
};

2、源文件

#include "QtableWidgetNB.h"
#include <QPushButton>
#include <QTableWidgetItem>
#include <QDebug>

Q_DECLARE_METATYPE(QTableWidgetItem*)

QtableWidgetNB::QtableWidgetNB(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);

	QStringList headList;
	headList << QStringLiteral("姓名") << QStringLiteral("操作");
	ui.tableWidget->setColumnCount(2);
	ui.tableWidget->setHorizontalHeaderLabels(headList);

	addRow(QStringLiteral("妲己"));
	addRow(QStringLiteral("貂蝉"));
	addRow(QStringLiteral("孙尚香"));
	addRow(QStringLiteral("大乔"));

}

QtableWidgetNB::~QtableWidgetNB()
{
}

void QtableWidgetNB::sltBtnAddClicked()
{
	QString str="";
	addRow(str);
}

void QtableWidgetNB::sltBtnDeleteClicked()
{
	QPushButton * pBtn = dynamic_cast<QPushButton*>(sender());
	if (NULL == pBtn)
	{
		return;
	}
	QTableWidgetItem* item = pBtn->property("item").value<QTableWidgetItem*>();
	if (NULL == item)
	{
		return;
	}
	int nRow = ui.tableWidget->row(item);
	removeRow(nRow);
}

void QtableWidgetNB::addRow(QString & name)
{
	// 在tableWidget里插入项
	int nRow = ui.tableWidget->rowCount();
	ui.tableWidget->setRowCount(nRow+1);
	QTableWidgetItem * pItem1 = new QTableWidgetItem(name);
	ui.tableWidget->setItem(nRow, 0, pItem1);

	// 操作按钮
	QPushButton* pBtnAdd = new QPushButton(QStringLiteral("添加"));
	connect(pBtnAdd, &QPushButton::clicked, this, &QtableWidgetNB::sltBtnAddClicked);

	QPushButton* pBtnDelete = new QPushButton(QStringLiteral("删除"));
	pBtnDelete->setProperty("item", QVariant::fromValue(pItem1));
	connect(pBtnDelete, &QPushButton::clicked, this, &QtableWidgetNB::sltBtnDeleteClicked);

	QWidget * pOperationWidget = new QWidget(ui.tableWidget);
	QHBoxLayout * pHblayOperation = new QHBoxLayout(pOperationWidget);
	pHblayOperation->setContentsMargins(0, 0, 0, 0);
	pHblayOperation->addWidget(pBtnAdd);
	pHblayOperation->addWidget(pBtnDelete);
	ui.tableWidget->setCellWidget(nRow , 1, pOperationWidget);
}

void QtableWidgetNB::removeRow(int nRow)
{
	if (nRow >= 0)
	{
		ui.tableWidget->removeRow(nRow);
	}
}

要实现这个功能,你需要对 table widget 进自定义,具体步骤如下: 1. 设置 table widget 的数和列数; 2. 在第一列中添加一个 QCheckBox 组件,通过 setCellWidget() 方法将其添加到 table widget 中; 3. 在第二列中添加一个 QComboBox 组件,通过 setCellWidget() 方法将其添加到 table widget 中; 4. 通过遍历 table widget 中的每一行,获取第一列的 QCheckBox 组件,并设置其为可选中状态; 5. 通过遍历 table widget 中的每一行,获取第二列的 QComboBox 组件,并添加选项; 6. 在 table widget 中添加一个按钮,用于获取用户选择的数据。 下面是一个示例代码,你可以参考一下: ```python from PySide6.QtCore import Qt from PySide6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QComboBox, QCheckBox, QPushButton, QVBoxLayout, QWidget class MultiSelectComboBoxTableWidget(QTableWidget): def __init__(self, parent=None): super().__init__(parent) self.setColumnCount(2) self.setRowCount(3) self.setHorizontalHeaderLabels(["Multi-Select", "Single-Select"]) for i in range(self.rowCount()): checkbox = QCheckBox() self.setCellWidget(i, 0, checkbox) combobox = QComboBox() combobox.addItems(["Option 1", "Option 2", "Option 3"]) self.setCellWidget(i, 1, combobox) checkbox.stateChanged.connect(self.on_checkbox_state_changed) self.button = QPushButton("Get Selected Data") self.button.clicked.connect(self.on_button_clicked) layout = QVBoxLayout() layout.addWidget(self) layout.addWidget(self.button) widget = QWidget() widget.setLayout(layout) self.selected_data = [] def on_checkbox_state_changed(self, state): checkbox = self.sender() row = self.indexAt(checkbox.pos()).row() if state == Qt.Checked: self.selected_data.append((row, self.cellWidget(row, 1).currentText())) else: self.selected_data.remove((row, self.cellWidget(row, 1).currentText())) def on_button_clicked(self): print(self.selected_data) if __name__ == '__main__': app = QApplication([]) widget = MultiSelectComboBoxTableWidget() widget.show() app.exec() ``` 这个示例代码中创建了一个名为 MultiSelectComboBoxTableWidget 的 table widget,其中第一列为多选,第二列为下拉单选。同时还添加了一个按钮用于获取用户选择的数据。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值