QTableWidget内部含有多行控件时,确定当前操作控件位置

要实现一个QTableWidget内部填充项为控件时,可采用setcellWidget方法进行填充。动态添加的代码如下:

m_rowCount = m_table->rowCount();//确定当前行数
m_table->insertRow(m_rowCount);//动态插入当前行,要使用insertRow插入一行,而不是使用setRow插入行,这样会导致实际没有插入该行,获取后续控件指针为空
	
m_table->setCellWidget(m_rowCount, 0, new QComboBox());//插入控件
QComboBox* cmbTopic = dynamic_cast<QComboBox*>(m_table->cellWidget(m_rowCount, 0));//获取插入的控件
cmbTopic->addItems(m_strListTopic);

插入完成的如下图

在选择另一个数据结构时,对应的主数据结构名需要进行相应的增删变化,如图所示。

然而问题来了,如何实现“数据结构”的那一列和“主数据结构名”的那一列实现梦幻联动呢(在选择“数据结构”列的相关选项之后,“主数据结构列”的数据也会相应的发生变化)?

解决方法为在需要选中的控件上触发信号函数,在相应的槽函数中获取目前为止的点的坐标,根据坐标获取table中的行数,问题得以解决,具体代码如下。

m_table-&g
### 启用多行文本编辑功能 在 PyQt5 中,`QTableWidget` 默认情况下不支持单元格中的多行文本编辑。要实现这一功能,需要通过自定义 `QTableWidgetItem` 并启用文本换行功能,同结合 `QTextEdit` 控件实现多行编辑效果。 可以通过以下方式实现: - **启用文本换行**:使用 `setTextElideMode()` 和 `setWordWrap(True)` 来启用文本自动换行功能。 - **嵌入 `QTextEdit` 控件**:在特定单元格中插入 `QTextEdit`,以支持多行输入和编辑操作[^1]。 ```python from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QTextEdit, QWidget, QVBoxLayout from PyQt5.QtCore import Qt app = QApplication([]) window = QWidget() window.setWindowTitle('QTableWidget 多行文本编辑') table = QTableWidget(3, 2) table.setHorizontalHeaderLabels(['文本列', '多行列']) # 填充普通文本 for row in range(3): item = QTableWidgetItem(f'这是第 {row} 行的文本') table.setItem(row, 0, item) # 插入多行文本编辑控件 text_edit = QTextEdit() text_edit.setPlainText("这是一个\n多行文本示例") table.setCellWidget(1, 1, text_edit) # 启用文本换行 table.resizeRowsToContents() # 设置布局 layout = QVBoxLayout() layout.addWidget(table) window.setLayout(layout) window.show() app.exec_() ``` 上述代码中,`QTextEdit` 被嵌入到表格的某个单元格中,以支持用户输入多行文本内容。同,`resizeRowsToContents()` 方法用于根据内容自动调整行高,从而确保多行文本可以完整显示[^2]。 ### 获取多行文本内容 在运行,可以通过调用 `cellWidget(row, col)` 方法获取嵌入的 `QTextEdit` 控件,并使用其 `toPlainText()` 方法读取多行文本内容: ```python text_edit = table.cellWidget(1, 1) if text_edit: print("多行文本内容:", text_edit.toPlainText()) ``` ### 自定义单元格样式 为了更好地展示多行文本内容,可以设置单元格的背景颜色、字体大小等样式属性。例如,通过 `QTableWidgetItem` 的 `setBackground()` 方法设置背景颜色: ```python item = QTableWidgetItem("多行文本") item.setBackground(Qt.lightGray) table.setItem(0, 1, item) ``` ### 示例整合 以下是一个完整的示例,展示了如何在 `QTableWidget` 中实现多行文本编辑功能,并结合自动调整行高和内容获取操作: ```python from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QTextEdit, QWidget, QVBoxLayout from PyQt5.QtCore import Qt app = QApplication([]) window = QWidget() window.setWindowTitle('QTableWidget 多行文本编辑示例') table = QTableWidget(3, 2) table.setHorizontalHeaderLabels(['单行文本', '多行文本']) # 填充单行文本 for row in range(3): item = QTableWidgetItem(f'单元格 {row}, 0') table.setItem(row, 0, item) # 插入 QTextEdit 到第1行第1列 text_edit = QTextEdit() text_edit.setPlainText("这是一个\n多行文本示例") table.setCellWidget(1, 1, text_edit) # 自动调整行高 table.resizeRowsToContents() # 获取多行文本内容 text_edit = table.cellWidget(1, 1) if text_edit: print("多行文本内容:", text_edit.toPlainText()) # 设置布局 layout = QVBoxLayout() layout.addWidget(table) window.setLayout(layout) window.show() app.exec_() ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值