Liu Zhian 2018-02-05 06:17 采纳率: 60%
浏览 3245
已采纳

Qt报错有未处理的异常?

已经确定错误出现在updateMenus()和connect()两句中。

 mainWindow::mainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    actionSeparator = new QAction(this);
    actionSeparator->setSeparator(true);
    updateMenus();  // 更新菜单
     //有活动窗口时更新菜单
    connect(ui.mdiArea, SIGNAL(subWindowActivated(QMidSubWindow *)), this, SLOT(updateMenus()));

    ui.setupUi(this);
    setActions();
}
 void mainWindow::updateMenus()
{
    // 根据是否有子窗口来设置各个动作是否可用
    bool hasMdiChill = (activeMidChild ()!= NULL);
    actionSave->setEnabled(hasMdiChill);
    actionSaveAs->setEnabled(hasMdiChill);
    actionPaste->setEnabled(hasMdiChill);
    actionClose->setEnabled(hasMdiChill);
    actionCloseAll->setEnabled(hasMdiChill);
    actionTile->setEnabled(hasMdiChill);
    actionCascade->setEnabled(hasMdiChill);
    actionPrevious->setEnabled(hasMdiChill);
    // 设置间隔器是否显示
    actionSeparator->setVisible(hasMdiChill);
    // 有活动窗口且有文本被选择时,剪切复制才可使用
    bool hasSelection = activeMidChild() && (activeMidChild()->textCursor().hasSelection());
    actionCut->setEnabled(hasSelection);
    actionCopy->setEnabled(hasSelection);
    // 有活动文档且文档有撤销操作时撤销动作可用
    actionUndo->setEnabled(activeMidChild() && activeMidChild()->document()->isUndoAvailable());
    // 有活动文档且文档有恢复操作时恢复动作可用
    actionRedo->setEnabled(activeMidChild() && activeMidChild()->document()->isRedoAvailable());
}

MdiClass *mainWindow::activeMidChild()
{
    //  如果有活动窗口,则将其中心部件转化为MdiClas类型
    if (QMdiSubWindow * activeWindow = ui.mdiArea->activeSubWindow())
    {
        return qobject_cast<MdiClass *>(activeWindow->widget());
    }
    return NULL;
}

报错:
0x6463477C (Qt5Widgetsd.dll) (myMdi.exe 中)处的第一机会异常: 0xC0000005: 读取位置 0x00000D50 时发生访问冲突。
0x6463477C (Qt5Widgetsd.dll) (myMdi.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000D50 时发生访问冲突。

我不太明白这里是什么意思? 求指教

  • 写回答

10条回答 默认 最新

  • 闭上左眼看世界 2018-02-05 06:56
    关注

    很正常啊,你把ui.setupUi(this);放到最前面就行了,因为你的connect在前面,不过小错误还是有点的.你自己看下吧.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 有点贪玩 2018-02-05 06:35
    关注

    感觉像是 activeMidChild()的问题,这函数直接让它return null,然后试试看还有没有这个问题?

    评论
  • l990203780 2018-02-05 06:48
    关注

    activeMidChild()从装就好哩

    评论
  • 闭上左眼看世界 2018-02-05 06:59
    关注

    当你可以编译成功的时候,会发现输出的地方提示你的信号槽的连接有些问题,因为参数没有对应。

    评论
  • wenguixu 2018-02-05 06:59
    关注

    把ui.setupUi(this)放最前面就可以了

    评论
  • mengdaishou 2018-02-05 08:18
    关注

    ui.setupUi(this); 放到前面
    不能再没有定义时使用界面内器件

    评论
  • xiahaimq 2018-02-05 08:42
    关注

    ui.setupUi(this);移到所在函数体最前面

    评论
  • HaoLu_0805 2018-02-05 09:53
    关注

    ui.setupUi(this); 要放到前面,还没有进行ui的setup,ui中所有的控件都没有进行实例化,导致在使用ui.mdiArea的时候出现指针错误

    评论
  • boy_1215 2018-02-07 07:31
    关注

    ui.mdiArea 是空的,ui.setupUi(this);提前

    评论
  • Liu Zhian 2018-02-07 11:41
    关注

    问题已解决,感谢各位回复~

    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥30 矩阵分析与古诗词意境
  • ¥15 在win10 64位的vs打包MSI文件,放到win7 64位上安装成可执行exe文件后,点击程序不运行。
  • ¥50 大众点评用户浏览/消费记录爬虫
  • ¥15 求制作一个个人网页,
  • ¥15 寻涂色内存脚本作者有项目有市场有资源.却技术
  • ¥15 蓝桥杯c51单片机问题
  • ¥15 ajax跨域问题请求修改代码
  • ¥15 python matplotlib
  • ¥15 短信测压+语音,有偿,必须用Python
  • ¥20 COCOS2DX的protobuf协议注册函数问题