在 table 中指定按钮/复选框的正确语法

Proper grammar for specifying a button / checkbox in a table

我想为 QTableWidget 中的按钮/复选框创建事件处理程序。 下面,我复制并粘贴了 table 演示源代码以供参考:

NB. =========================================================
fmt1=: 3 : 0
if. 2=3!:0 y do. ' "',y,'"' else. ' ',,8!:2 y end.
)

NB. =========================================================
Tab=: _2 [\ 11 8 6 9 23 6
Sel=: 0 0 1

NB. =========================================================
makedata=: 3 : 0
t=. <&>t,+/t=. Tab,.+/"1 Tab
dat=. ((<&>Sel),<''),.t,.;:'USA Japan Germany All'
;fmt1 each ,dat
)

NB. =========================================================
table=: 3 : 0
wd 'pc table'
wd 'cc pac table 4 5'
wd 'set pac hdr Select Hire Lease Total Origin'
wd 'set pac hdralign 1 1 1 1 0'
wd 'set pac type ',":20{.150 0 0 0 0
wd 'set pac align 1 2 2 2 0'
wd 'set pac protect ',":20{.(!.1) 15[=11=] 0 0 1 1
wd 'set pac lab Ford Toyota "Mercedes Benz" Total'
wd 'set pac data *',makedata''
wd 'pmove 100 10 500 200'
wd 'pshow'
)

NB. =========================================================
table_pac_change=: 3 : 0
'row col'=. 0 ". pac_cell
new=. 0 ". pac
if. col=0 do.
  Sel=: new row} Sel
else.
  Tab=: new (<row,col-1)} Tab
  wd 'set pac data *',makedata''
end.
)

NB. =========================================================
table_close=: 3 : 0
wd 'pclose'
showevents_jqtide_ 0
)

NB. =========================================================
showevents_jqtide_ 2
table''

我希望能够将事件处理程序添加到 "Select" 列下和 "Toyota" 行中的复选框。从在线文档中,我了解到为复选框指定事件处理程序的正确方法是 "formname_childname_checkbox".

但是,从未给出复选框的子名称;即复选框是使用以下方式大量生成的:

wd 'set pac type 100'

我尝试使用复选框指定特定单元格:

wd 'set pac block 1 1'
table_pac_checkbox = 3 : 0
NB. code here
)

虽然这似乎没有任何作用。我在指定事件处理程序时做错了什么吗?

我认为您 运行 遇到的问题是单击复选框会创建更改事件,而单击数据单元会生成 mbldown 事件。如果将这些事件处理程序放入其中,您将看到带有适当单元格名称的消息框弹出。

table_pac_change=: 3 : 0
  wdinfo  ":pac_cell
)
table_pac_mbldown=: 3 : 0
  wdinfo  ":pac
)

这表明您的事件已正确触发。那时你选择做什么取决于你。 showevents table 的 sysevents 行对于查看触发了哪些事件以及随后需要编写哪些处理程序非常有用。

希望这对您有所帮助。