Golang中如何在QTableWidget中设置Item?
Golang中如何在QTableWidget中设置Item? 我正在使用 Go QT 绑定,到目前为止,当遇到无法解决的问题时,通过参考 C++ 示例,我一直很顺利。但现在我卡在如何向指定的列/行插入数据上。整个 GUI 除了在表格中设置数据外,基本已经完成。
在其他语言中有几篇帖子展示了我正试图实现的功能: c++ 示例 python 示例
查看 godocs 时,发现有一个类型为 QTableWidgetItem_ITF 的参数。根据 VSCode 中的错误/建议,我需要通过 QTableWidgetItem_PTR 方法将一个字符串(要插入的数据)转换为 QTableWidgetItem_ITF:
cannot use entry (type string) as type widgets.QTableWidgetItem_ITF in argument to t.myTable.SetItem:
string does not implement widgets.QTableWidgetItem_ITF (missing QTableWidgetItem_PTR method)
Go 代码如下所示:
t.myTable.InsertRow(index)
t.myTable.SetItem(index, col, entry) // entry 应为 widgets.QTableWidgetItem_ITF 类型
我尝试了几种方法,包括类似于上面链接中的做法,尝试使用 widget.QTableWidgetItem() 或 widget.NewQTableWidgetItem(),但似乎需要传递一个指针。
如何将数据插入到指定的表格单元格中?
编辑:额外说明一下,我创建表格的方式如下:
t.myTable = widgets.NewQTableWidget(t.window)
t.myTable.SetFixedHeight(625)
...
... (更多表格外观属性)
并且 `*widgets.QTableWidget` 在我的主结构体中...
更多关于Golang中如何在QTableWidget中设置Item?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
好的,我找到了答案……我一直在找的是 NewQTableWidgetItem2() 这个方法:
t.myTable.SetItem(index, col, widgets.NewQTableWidgetItem2(entry, col))
更多关于Golang中如何在QTableWidget中设置Item?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go QT绑定中,你需要创建一个QTableWidgetItem来设置表格单元格的内容。以下是正确的实现方式:
package main
import (
"github.com/therecipe/qt/widgets"
)
func main() {
// 创建表格
table := widgets.NewQTableWidget(nil)
table.SetRowCount(3)
table.SetColumnCount(2)
// 设置表头
table.SetHorizontalHeaderLabels([]string{"姓名", "年龄"})
// 向指定单元格插入数据
// 第0行,第0列
item1 := widgets.NewQTableWidgetItem2("张三", 0)
table.SetItem(0, 0, item1)
// 第0行,第1列
item2 := widgets.NewQTableWidgetItem2("25", 0)
table.SetItem(0, 1, item2)
// 第1行,第0列
item3 := widgets.NewQTableWidgetItem2("李四", 0)
table.SetItem(1, 0, item3)
// 第1行,第1列
item4 := widgets.NewQTableWidgetItem2("30", 0)
table.SetItem(1, 1, item4)
// 显示表格
table.Show()
widgets.QApplication_Exec()
}
针对你的具体代码,修改如下:
// 插入新行
t.myTable.InsertRow(index)
// 创建QTableWidgetItem并设置文本
item := widgets.NewQTableWidgetItem2(entry, 0)
// 设置到指定单元格
t.myTable.SetItem(index, col, item)
如果你需要更复杂的设置,比如文本对齐方式:
// 创建item
item := widgets.NewQTableWidgetItem2(entry, 0)
// 设置文本对齐方式(居中对齐)
item.SetTextAlignment(0x0004 | 0x0080) // Qt.AlignHCenter | Qt.AlignVCenter
// 设置到表格
t.myTable.SetItem(index, col, item)
或者批量设置数据:
func populateTable(table *widgets.QTableWidget, data [][]string) {
table.SetRowCount(len(data))
table.SetColumnCount(len(data[0]))
for i, row := range data {
for j, value := range row {
item := widgets.NewQTableWidgetItem2(value, 0)
table.SetItem(i, j, item)
}
}
}
// 使用示例
data := [][]string{
{"张三", "25", "北京"},
{"李四", "30", "上海"},
{"王五", "28", "广州"},
}
populateTable(t.myTable, data)
关键点是:NewQTableWidgetItem2(text string, typ int)函数创建了一个QTableWidgetItem对象,第二个参数是item类型(0表示标准类型)。这个函数返回的是*widgets.QTableWidgetItem,它实现了widgets.QTableWidgetItem_ITF接口,因此可以直接传递给SetItem()方法。

