gpt4 book ai didi

c++ - 插槽后 Qt 访问冲突 0xC0000005

转载 作者:行者123 更新时间:2023-11-30 04:21:03 27 4
gpt4 key购买 nike

我有一个问题,我刚刚想好该怎么做,所以也许你可以帮助我。

我正在开发一个连接到数据库、显示值并允许用户更新/插入值的应用程序。

我有一个 QTabView,其中一个选项卡内有四个 QTableWidget。在这个表中有时(取决于数据库的值)一个 QComboBox 来选择一些预定义的值。我用 QSignalMapper 捕获 QComboBox::selectedIndexChanged(int) 并有一个 slot 连接到 QSignalMapper 以提供一些信息它是什么表以及更改了什么设置。我有时会创建新的 SettingsMapper(并在此之前将其删除)以重置“过时的”映射器组合框连接。

所以问题是,当我更改组合框内的索引时,插槽被调用,我可以调试到 moc_*.cpp,其中信号/插槽连接的开关所在,但之后我得到 地址 0xC0000005 上的访问冲突 在 dll 中。

这里是调用栈:

QtCored4.dll!6721af70()     
[Frames below may be incorrect and/or missing, no symbols loaded for QtCored4.dll]
QtCored4.dll!67219fe5()
QtCored4.dll!67218f14()
QtCored4.dll!67218e48()
QtCored4.dll!6721903d()
QtCored4.dll!6720f874()
QtCored4.dll!6702429b()
QtCored4.dll!670316f3()
QtGuid4.dll!655b93f1()
QtGuid4.dll!650f99d0()
user32.dll!7e41885a()
user32.dll!7e41882a()
user32.dll!7e42b326()
msctf.dll!7472467f()
user32.dll!7e43e1ad()
user32.dll!7e43e18a()
QtCored4.dll!67234b9c()
user32.dll!7e42b372()
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e4189cd()
user32.dll!7e418a10()
QtCored4.dll!672359b6()
ntdll.dll!7c90cfdc()
ntdll.dll!7c958e0d()
ntdll.dll!7c95932a()
ntdll.dll!7c90cfdc()
ntdll.dll!7c9594ca()
ntdll.dll!7c919ca7()
ntdll.dll!7c918f01()
ntdll.dll!7c91925d()
ntdll.dll!7c918f01()
ntdll.dll!7c9101bb()
ntdll.dll!7c9192ef()
ntdll.dll!7c918f01()
ntdll.dll!7c9101bb()
user32.dll!7e4277b0()
user32.dll!7e4277f7()
ntdll.dll!7c90da0c()
kernel32.dll!7c8024c7()
msctf.dll!74725951()
msctf.dll!74725956()
user32.dll!7e418a80()
user32.dll!7e418734()
user32.dll!7e418816()
ntdll.dll!7c96c6a7()
QtCored4.dll!6723c8f6()
datProgram.exe!__tmainCRTStartup() Line 578 + 0x35 bytes C
datProgram.exe.exe!WinMainCRTStartup() Line 403 C
kernel32.dll!7c817067()

`

让我好奇的是,在另一个选项卡中有一个QTableWidget,其方法与上述相同,但问题并未出现在那里。当在发布版本(Ctrl+F5)中运行时,问题似乎也消失了......ò.Ó

有什么建议吗?

最佳答案

From time to time i create the SettingsMapper new (and delete it before that) to reset the 'outdated' mapper-combobox connections.

您是否偶然从信号映射器发送的信号所调用的插槽中删除了信号映射器?这是不允许的,当您当前处于该实例的方法中时无法删除该实例。

解决方案是改用 deleteLater()。当控制返回到事件循环时,这将导致对象被删除。

关于c++ - 插槽后 Qt 访问冲突 0xC0000005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14836999/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com