qq_37174526
Liu Zhian
2018-02-05 06:17

Qt报错有未处理的异常?

5
  • qt
  • widget
  • 异常

已经确定错误出现在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条回答