1

私は私が何をすべきかを理解したばかりの問題を抱えているので、多分あなたは私を助けることができます。

私はデータベースに接続し、値を表示し、ユーザーが値を更新/挿入できるようにするアプリケーションに取り組んでいます。

私はを持ってQTabViewおり、タブの1つの中に4つQTableWidgetのがあります。このテーブルの中には、(データベースの値に応じて)QComboBoxいくつかの事前定義された値を選択することがあります。QComboBox::selectedIndexChanged(int)私はaでキャッチし、QSignalMapperslot接続して、QSignalMapperそれがどのテーブルで、どの設定が変更されたかについての情報を提供します。時々、SettingsMapperを新しく作成して(そしてその前に削除して)、「古い」マッパーとコンボボックスの接続をリセットします。

したがって、問題は、コンボボックス内のインデックスを変更すると、スロットが呼び出され、信号/スロット接続のスイッチがあるmoc _ *。cppにデバッグできることですが、その後access violation on address 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)で実行すると、問題も解消されたようです...ò.Ó

何かアドバイス?

4

1 に答える 1

2

時々、SettingsMapperを新しく作成して(そしてその前に削除して)、「古い」マッパーとコンボボックスの接続をリセットします。

万が一、シグナルマッパーから送信されたシグナルによって呼び出されたスロットからシグナルマッパーを削除しますか?それは許可されていません。現在そのインスタンスのメソッドを使用している場合、インスタンスを削除することはできません。

解決策は、代わりにdeleteLater()を使用することです。これにより、制御がイベントループに戻ったときにオブジェクトが削除されます。

于 2013-02-12T18:09:20.107 に答える