gpt4 book ai didi

windows - Qt App 在 MacOSX 上运行良好,在 Windows 上访问冲突

转载 作者:可可西里 更新时间:2023-11-01 14:13:53 29 4
gpt4 key购买 nike

所以我遇到了一个我暂时无法解决的问题。我正在用 C++ 编写 Qt 应用程序,并且一直在 MacOSX 上开发,它运行良好。但是,当我在 Windows 中测试代码时,当我关闭或取消我拥有的 QDialog 子项时,我遇到了以下访问冲突:

MyApp.exe 中 0x5ce6b1ea (QtGuid4.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xfeeefefa。

调试它时,我发现它在大量 Qt api 调用后崩溃,最终进入 QWindowSurface_Raster.cpp。这是它崩溃的 Qt 库代码:

#endif
{
QPoint wOffset = qt_qwidget_data(widget)->wrect.topLeft();

HDC widget_dc = widget->getDC();

QRect wbr = br.translated(-wOffset);
BitBlt(widget_dc, wbr.x(), wbr.y(), wbr.width(), wbr.height(),
/*CRASH HERE!*/ d->image->hdc, br.x() + offset.x(), br.y() + offset.y(), SRCCOPY);
widget->releaseDC(widget_dc);
}

最后这是我调用 qdialog 的代码:

void MainWindow::prefDialog()
{
prefD = new PreferenceDialog(this);
prefD->exec();
} /* crashes here, after I hit cancel/ok on dialog and it leaves exec */

PreferenceDialog.h:

class PreferenceDialog : public QDialog
{
Q_OBJECT

public:
PreferenceDialog(QWidget *parent);
.....

PreferenceDialog.c

PreferenceDialog::PreferenceDialog(QWidget *parent) :
QDialog(parent)
{
....
connect(okayButton, SIGNAL(released()), this, SLOT(okayClicked()));
connect(addKeyButton, SIGNAL(released()), this, SLOT(addClicked()));
connect(cancelButton, SIGNAL(released()), this, SLOT(cancelClicked()));
....

我可以向您展示我的 PreferenceDialog 代码或任何其他代码,但我认为它只会让事情变得臃肿。除了显示之外,PreferenceDialog 没有做太多事情,而且我没有覆盖任何函数,如 exec() 等。堆栈跟踪也非常臃肿,所以我现在不会发布,它只是 exec() 之后的一堆 Qtguid4.dll 调用完成,(大约 10)直到它在 QWindowRaster 中崩溃。

如果需要任何其他信息,请告诉我。我是 Qt 的新手,所以很难弄清楚这一点,非常感谢任何帮助,谢谢!

最佳答案

我调用 QDialog::destroy() 而不是 QDialog::close() 来关闭窗口。当 Qt 完成 QDialog::exec() 并在 Windows 上导致崩溃时,这会导致空指针异常。更改对 close() 的调用解决了问题。

感谢 HostileFork 的建议

关于windows - Qt App 在 MacOSX 上运行良好,在 Windows 上访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12701541/

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