QTableWidget 添加复选框,添加按钮

QTableWidget中添加button
QTableWidget 中插入QCheckBox复选框,状态判断,居中显示
QTableWidget使用setCellWidget设置控件居中显示
界面
在这里插入图片描述

添加button

for (int i = 0; i < 3; i++)
{
	QPushButton *pBtn = new QPushButton(QIcon(":/image/point.png") ,"");
	pBtn -> setIconSize(QSize(20, 20));
	ui.tableWidget->setCellWidget(i, 5, pBtn);
	connect(pBtn, SIGNAL(pressed()), this, SLOT(OnBtnRollbackClicked()));
}

槽函数:获取行号

 void  OnBtnRollbackClicked()
{
	QPushButton *senderObj = qobject_cast<QPushButton*>(sender());
	if (senderObj == nullptr)
	{
		return;
	}
	QModelIndex idx = ui.tableWidget->indexAt(QPoint(senderObj->frameGeometry().x(), senderObj->frameGeometry().y()));
	int row = idx.row();
	//do something
}

添加QCheckBox

QCheckBox * pCheckBox = new QCheckBox();
ui.tableWidget->setCellWidget(1, 4, pCheckBox);
connect(pCheckBox, SIGNAL(stateChanged(int)), this, SLOT(SlotSetChecked(int)));

如果控件需要居中

QWidget *widget = new QWidget();
QHBoxLayout *layout = new QHBoxLayout();

QCheckBox *checkBox = new QCheckBox; 
layout->addWidget(checkBox, 0, Qt::AlignCenter);
layout->setMargin(0);
widget->setLayout(layout);
connect(checkBox, &QCheckBox::stateChanged, this, &CConsult::SlotSetChecked);
ui->table->setCellWidget(14, widget);

任何在QTableWidget中需要居中显示的控件,都建议:

  1. new QWidget
  2. new 一个布局,QHBoxLayout 就可以
  3. QWidget 加入布局加入 控件居中
  4. 最后把 QWidget 加到QTableWidget中

槽函数

void  SlotSetChecked(int)
{
	QCheckBox *senderObj = qobject_cast<QCheckBox*>(sender());
	if (senderObj == nullptr)
	{
		return;
	}
	QModelIndex idx = ui.tableWidget->indexAt(QPoint(senderObj->frameGeometry().x(), senderObj->frameGeometry().y()));
	int row = idx.row();
	bool enable = senderObj->isChecked();
	//dosomething
}
  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PyQt5中,要实现表格头框的全功能,可以通过添加一个框到表格头,并且连接信号与槽函数来实现这一功能。首先,需要创建一个表格视图,并设置好表头和数据模型。然后,在表格头部添加一个框作为全按钮。接着,连接这个框的信号与槽函数,当框状态改变时,遍历表格所有行,并中或取消中每一行的框。 ```python import sys from PyQt5.QtWidgets import QApplication, QTableView, QTableWidget, QTableWidgetItem, QCheckBox, QHBoxLayout, QWidget, QVBoxLayout class MyTable(QTableView): def __init__(self, data): super(MyTable, self).__init__() self.data = data self.initUI() def initUI(self): self.setWindowTitle('PyQt5 Table') self.setGeometry(100, 100, 600, 300) self.tableWidget = QTableWidget() self.tableWidget.setRowCount(len(self.data)) self.tableWidget.setColumnCount(len(self.data[0])) for i, row in enumerate(self.data): for j, cell in enumerate(row): item = QTableWidgetItem(cell) self.tableWidget.setItem(i, j, item) header = self.tableWidget.horizontalHeader() checkbox = QCheckBox() header.setSectionResizeMode(QHeaderView.Stretch) header.setSectionResizeMode(0, QHeaderView.ResizeToContents) layout = QVBoxLayout() layout.addWidget(checkbox) self.tableWidget.setHorizontalHeaderLayout(layout) checkbox.stateChanged.connect(self.selectAllRows) mainLayout = QHBoxLayout() mainLayout.addWidget(self.tableWidget) widget = QWidget() widget.setLayout(mainLayout) self.setCentralWidget(widget) def selectAllRows(self, state): for i in range(self.tableWidget.rowCount()): item = self.tableWidget.item(i, 0) if state == 2: item.setCheckState(2) else: item.setCheckState(0) if __name__ == '__main__': app = QApplication(sys.argv) data = [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']] window = MyTable(data) window.show() sys.exit(app.exec_()) ``` 在这个例子中,我们创建了一个自定义的表格视图类MyTable,在该类中初始化了表格和框,并且连接了框的信号与槽函数。当框的状态改变时,selectAllRows函数会被触发,遍历表格中的所有行,并中或取消中每一行的框。这样就实现了表格头框的全功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值