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

2 回复

好的,我找到了答案……我一直在找的是 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()方法。

回到顶部