qt - Qthread在Golang中只发出一个信号
问题描述
我正在使用 Golang 和 Qt 开发程序。对于繁重的任务,我遇到了 Qthread 的问题。
这是我的代码:
MainUi.go
// Start new thread first
workThread := core.NewQThread(nil)
workThread.Start()
// Start a worker
wkr := worker.InitWorkPool()
wkr.MoveToThread(workThread)
wkr.ConnectReportOne(func(v0 int, v1 int) {
// I put this code here to check is it called but not see anything
fmt.Println("Report One")
label1.SetText(strconv.Itoa(v0))
label2.SetText(strconv.Itoa(v1))
}
wkr.ConnectReportTwo(func(v0 int, v1 int, v2 int) {
label3.SetText(strconv.Itoa(v0))
label4.SetText(strconv.Itoa(v1))
label5.SetText(strconv.Itoa(v2))
}
wkr.ConnectFinished(func() {
widgets.QMessageBox_Information(nil, "Finished", "Task finished", widgets.QMessageBox__Ok, widgets.QMessageBox__Ok)
}
wkr.Run()
工人.go
type WorkPool struct {
core.QObject
_ func(int, int) `signal:"reportOne"`
_ func() `signal:"finished"`
_ func(int, int, int) `signal:"reportTwo"`
}
func InitWorkPool() *WorkPool {
return &WorkPool{}
}
func (wp *WorkPool) Run() {
wp.ReportOne(11, 12) // This func not work
wp.ReportTwo(21, 22, 23) // This func not work
/* Do some stuff */
wp.Finished() //This func work
}
我跑来qtmoc
生成一些附加代码。
wp.Finished()
如果我首先调用它或通过另一个函数(如StopTask()
. 但wp.ReportOne()
并wp.ReportTwo()
不能工作和冻结MainUi
。
任何人都可以告诉我我的代码有什么问题。我花了2天时间。
谢谢阅读。
解决方案
我解决了我的问题。这是我的解决方案
func InitWorkPool() *WorkPool {
wp := NewWorkPool() // Not return &WorkPool{}
return wp
}
顺便说一句,您也可以在 Go 中使用go routines
替换。Qthread
示例来源:https ://github.com/therecipe/qt/issues/567#issuecomment-374654006
推荐阅读
- sql - 总结特定时期特定名称的值?
- java - 尝试在 RecyclerView 中添加新元素时,某些项目重复
- java - 如何将 Jersey REST 服务器部署到 Heroku
- npm - 为什么建议全局安装 gulp 和 grunt
- html - 如何最好地在 Angular 中动态显示/隐藏字符串段?
- linux - 在搅拌机请求中选择卡?
- python - 如何修复将表达式转换为数据类型 int 的算术溢出错误
- rxandroidble - 当应用程序不在前台使用 rxandroidble 时如何自动连接到 BLE 设备?
- reactjs - 有没有办法呈现在 ACE 编辑器中编写的 HTML 代码
- qt - Qt Webkit 启用 Cookie