kitech/qt.go

QFileDialog GetOpenFileName 使用上造成崩溃

wrzfeijianshen opened this issue · 2 comments

代码如下. 运行后导致程序崩溃,但GetExistingDirectoryp 目录就没有问题,而打开文件有问题

fileFialog := qtwidgets.NewQFileDialog1(this.MainWindow, "打开文件", path, "*.*")
str := fileFialog.GetOpenFileNamep()

写了个简单的测试,竟然不崩溃。可能还需要更长一点的代码
OS: linux
qtinline && qt.go: 5.12

https://github.com/qtchina/qt.go.demos/blob/master/issue38/main.go

大体上是这样子的,操作如下: 先窗口大小拉大后, 打开文件成功之后,再把窗口的大小,拉大,缩小.循环往复几次,程序就崩溃了
程序 在上,崩溃日志在下边

package main

import (
	"fmt"
	"os"

	"github.com/kitech/qt.go/qtgui"
	"github.com/kitech/qt.go/qtrt"
	"github.com/kitech/qt.go/qtwidgets"
)

func main() {
	app := qtwidgets.NewQApplication(len(os.Args), os.Args, 0)

	mw := NewUi_MainWindow2()
	mw.MainWindow.Resize(200, 200)
	btn := qtwidgets.NewQPushButton(mw.MainWindow)
	btn.Resize(100, 50)
	qtrt.Connect(btn, "clicked(bool)", func(bool) {
		fmt.Println("点击了")
		path := "."
		fileFialog := qtwidgets.NewQFileDialog1(mw.MainWindow, "openfile", path, "*.*")
		str := fileFialog.GetOpenFileNamep()
		// fileFialog.Close()
		fmt.Println(str)
	})
	mw.MainWindow.Show()

	if false {
		f1 := func(painter *qtgui.QPainter) {
			painter.SetPen2(1)
			painter.DrawLine2(10, 10, 100, 100)
		}
		mw.Centralwidget.InheritInitPainter(f1)
	}

	app.Exec()
}
Exception 0xc0000005 0x0 0xd00000001 0x678ac4f8
PC=0x678ac4f8

runtime: unknown pc 0x678ac4f8
stack: frame={sp:0x185ffa80, fp:0x0} stack=[0x0,0x185ffe30)
00000000185ff980:  0000000016000016  ffffffffffffffff
00000000185ff990:  ffffffffffffffff  00007ffbcbb168fe
00000000185ff9a0:  00007ffbcbb1691e  0000000000000000
00000000185ff9b0:  00000000075b7c20  0000000000000000
00000000185ff9c0:  0000000000000000  00000000676c0080
00000000185ff9d0:  00000000075b7c10  00007ffbcbae267d
00000000185ff9e0:  0000000000000000  00007ffbcbad9092
00000000185ff9f0:  0000000067a9d000  00000000676c0000
00000000185ffa00:  0000000000000001  00000000185ffa60
00000000185ffa10:  0000000067ab8ea8  0000000067ad4d28
00000000185ffa20:  0000000000000000  0000000000000000
00000000185ffa30:  00000000185ffbd8  0000000000000000
00000000185ffa40:  0000000000000000  00000000075bc560
00000000185ffa50:  0000000002ef4d20  00007ffbcbad921e
00000000185ffa60:  00000000676c0080  0000000002ef3e70
00000000185ffa70:  00000000185ffb41  0000000000000001
00000000185ffa80: <ffffffffffffffff  00000000185ffc60
00000000185ffa90:  000000c000047930  000000c000442000
00000000185ffaa0:  0000000d00000001  00000000676fd132
00000000185ffab0:  ffffffffffffffff  000000006b744765
00000000185ffac0:  00000000004535ed <runtime.(*mheap).freeSpan.func1+269>  0000000001a5cbe0
00000000185ffad0:  000000c000047930  000000006b744797
00000000185ffae0:  0000000d00000001  0000000000000000
00000000185ffaf0:  0000000002ef3e70  0000000000000000
00000000185ffb00:  0000000000000000  0000000000000000
00000000185ffb10:  00000000185ffae0  0000000000000000
00000000185ffb20:  00000000185ffb80  000000006b7443a7
00000000185ffb30:  000000006b744060  00000000185ffb60
00000000185ffb40:  0000000000000030  0000000000000000
00000000185ffb50:  000000c00000a098  00000000676fd120
00000000185ffb60:  00000000185ffd00  000000c00000a098
00000000185ffb70:  00000000185ffbc0  00000000075bc560
runtime: unknown pc 0x678ac4f8
stack: frame={sp:0x185ffa80, fp:0x0} stack=[0x0,0x185ffe30)
00000000185ff980:  0000000016000016  ffffffffffffffff
00000000185ff990:  ffffffffffffffff  00007ffbcbb168fe
00000000185ff9a0:  00007ffbcbb1691e  0000000000000000
00000000185ff9b0:  00000000075b7c20  0000000000000000
00000000185ff9c0:  0000000000000000  00000000676c0080
00000000185ff9d0:  00000000075b7c10  00007ffbcbae267d
00000000185ff9e0:  0000000000000000  00007ffbcbad9092
00000000185ff9f0:  0000000067a9d000  00000000676c0000
00000000185ffa00:  0000000000000001  00000000185ffa60
00000000185ffa10:  0000000067ab8ea8  0000000067ad4d28
00000000185ffa20:  0000000000000000  0000000000000000
00000000185ffa30:  00000000185ffbd8  0000000000000000
00000000185ffa40:  0000000000000000  00000000075bc560
00000000185ffa50:  0000000002ef4d20  00007ffbcbad921e
00000000185ffa60:  00000000676c0080  0000000002ef3e70
00000000185ffa70:  00000000185ffb41  0000000000000001
00000000185ffa80: <ffffffffffffffff  00000000185ffc60
00000000185ffa90:  000000c000047930  000000c000442000
00000000185ffaa0:  0000000d00000001  00000000676fd132
00000000185ffab0:  ffffffffffffffff  000000006b744765
00000000185ffac0:  00000000004535ed <runtime.(*mheap).freeSpan.func1+269>  0000000001a5cbe0
00000000185ffad0:  000000c000047930  000000006b744797
00000000185ffae0:  0000000d00000001  0000000000000000
00000000185ffaf0:  0000000002ef3e70  0000000000000000
00000000185ffb00:  0000000000000000  0000000000000000
00000000185ffb10:  00000000185ffae0  0000000000000000
00000000185ffb20:  00000000185ffb80  000000006b7443a7
00000000185ffb30:  000000006b744060  00000000185ffb60
00000000185ffb40:  0000000000000030  0000000000000000
00000000185ffb50:  000000c00000a098  00000000676fd120
00000000185ffb60:  00000000185ffd00  000000c00000a098
00000000185ffb70:  00000000185ffbc0  00000000075bc560

goroutine 18 [syscall]:
github.com/kitech/qt.go/qtrt._C2func_ffi_call_ex(0x676fd120, 0x0, 0xc00000a098, 0x1, 0xc000012380, 0xc000016140, 0x0, 0x0)
        _cgo_gotypes.go:163 +0x54
github.com/kitech/qt.go/qtrt.InvokeQtFunc6.func1(0x676fd120, 0xc00000a000, 0xc00000a098, 0xc000047b30, 0x1, 0x1, 0xc000012380, 0x14, 0x14, 0xc000016140, ...)
        D:/workspace/src/github.com/kitech/qt.go/qtrt/ffi_invoke.go:293 +0xb9
github.com/kitech/qt.go/qtrt.InvokeQtFunc6(0xe85c27, 0xf, 0x40d500, 0xc000047b30, 0x1, 0x1, 0xc000006030, 0xc000047b28, 0x485e91)
        D:/workspace/src/github.com/kitech/qt.go/qtrt/ffi_invoke.go:293 +0x198
github.com/kitech/qt.go/qtcore.DeleteQString(0xc0000985c8)
        D:/workspace/src/github.com/kitech/qt.go/qtcore/qstring.go:293 +0x93
reflect.Value.call(0xd54b20, 0xeda4c8, 0x13, 0xe7e6a7, 0x4, 0xc000047ec0, 0x1, 0x1, 0x20, 0xf82097, ...)
        C:/Go/src/reflect/value.go:447 +0x468
reflect.Value.Call(0xd54b20, 0xeda4c8, 0x13, 0xc000047ec0, 0x1, 0x1, 0x28, 0xdbdf20, 0x0)
        C:/Go/src/reflect/value.go:308 +0xab
github.com/kitech/qt.go/qtrt.SetFinalizer.func1.1()
        D:/workspace/src/github.com/kitech/qt.go/qtrt/qtrt.go:101 +0x1fa
github.com/kitech/qt.go/qtrt.glob..func3(0xc000082b70)
        D:/workspace/src/github.com/kitech/qt.go/qtrt/qtrt.go:72 +0x2c
github.com/kitech/qt.go/qtrt.SetFinalizer.func1(0xe56720, 0xc0000985c8)
        D:/workspace/src/github.com/kitech/qt.go/qtrt/qtrt.go:92 +0x9f

goroutine 1 [syscall, locked to thread]:
github.com/kitech/qt.go/qtrt._C2func_ffi_call_ex(0x67786880, 0xe, 0xc00006de78, 0x0, 0xc0000c9400, 0xc0000cff40, 0x0, 0x0)
        _cgo_gotypes.go:163 +0x54
github.com/kitech/qt.go/qtrt.InvokeQtFunc6.func1(0x67786880, 0xc00006de0e, 0xc00006de78, 0x0, 0x0, 0x0, 0xc0000c9400, 0x14, 0x14, 0xc0000cff40, ...)
        D:/workspace/src/github.com/kitech/qt.go/qtrt/ffi_invoke.go:293 +0xb9
github.com/kitech/qt.go/qtrt.InvokeQtFunc6(0xe948db, 0x18, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        D:/workspace/src/github.com/kitech/qt.go/qtrt/ffi_invoke.go:293 +0x198
github.com/kitech/qt.go/qtwidgets.(*QApplication).Exec(0xc000098098, 0xfd9b40)
        D:/workspace/src/github.com/kitech/qt.go/qtwidgets/qapplication.go:1315 +0x57
main.main()
        D:/workspace/src/github.com/wrzfeijianshen/qt.go_demo/src/_1/05_窗口/main.go:37 +0x18c
rax     0x0
rbx     0xd00000001
rcx     0xd00000001
rdi     0x185ffc60
rsi     0xc000442000
rbp     0x185ffb10
rsp     0x185ffa80
r8      0x2ef3e70
r9      0x0
r10     0x185ffc68
r11     0x185ffd00
r12     0xffffffffffffffff
r13     0x8
r14     0x7
r15     0x400
rip     0x678ac4f8
rflags  0x10202
cs      0x33
fs      0x53
gs      0x2b
QObject::~QObject: Timers cannot be stopped from another thread