【问题标题】:Qt 5.2.1 QFileDialog GDB strange behaviourQt 5.2.1 QFileDialog GDB 奇怪的行为
【发布时间】:2016-03-02 10:26:48
【问题描述】:

我在 Windows 7 机器上使用 Qt 5.2.1 MinGW 32bit 和来自 MinGW 4.8 的 gdb。 当我尝试单步执行代码时出现了一个奇怪的行为。

QFileDialog open;
open.setDefaultSuffix("tst");
QString fileName=open.getSaveFileName(this,tr("New File"),"",tr("Test File (*.tst)"));
if(fileName!="")
{
...

我在第一行设置了一个断点。 单步执行直到第 3 行,然后,在选择文件后,gdb 会说:

无法插入断点 -1217。 访问内存地址 0x7219cd30 时出错:输入/输出错误。

当我在 if 或之后设置断点时,调试器会在断点处停止,但是当我尝试在停止后单步执行时,会发生同样的错误。

当我直接设置文件名时:

QFileDialog open;
open.setDefaultSuffix("tst");
QString fileName="D:\path\to\File.tst";
if(fileName!="")
{
...

单步运行没有任何问题。

上面的代码运行没有任何问题,只有当我尝试单步时才会出现问题。

有谁知道这个问题或合适的解决方法吗?

【问题讨论】:

  • 问题可能出在open.getSaveFileName(),它打开了一个模式对话框,阻止执行到下一行if(fileName!="")...。我也会在第四行放一个断点,以便在选择文件时停止。
  • 我试过了。但是当我在第 4 行(或更高版本,我在 if 中做很多事情)放置一个断点时,会发生同样的错误。 @vahancho

标签: qt gdb qt5 qfiledialog qt5.2


【解决方案1】:

QFileDialog::getSaveFileName() 是一个静态函数,但您将其称为成员方法。 我只是猜测,但您通过对象调用静态成员的方式可能会混淆您的调试环境 - 编译器应该生成有效代码,因此运行您的代码将起作用。

顺便说一句,setDefaultSuffix 不会按预期工作,因为 getSaveFileName 是静态成员,不会查看您的 QFileDialog 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2016-04-09
    • 2014-09-19
    相关资源
    最近更新 更多