QWidget :: insertAction尝试在运行时插入null操作

时间:2012-03-10 21:55:50

标签: c++ qt qwidget

所以,我正在尝试在QT Creator中运行我的电子表格应用程序并且编译没有错误,但是当我尝试运行应用程序时,我收到以下错误QWidget::insertAction Attempt to insert null action。问题是我不知道问题出在哪里......错误没有出现在QT Creator的错误部分,而是出现在运行程序时创建的小终端中。

我有一个createActions()函数初始化标题中启动的所有操作,可能是从那里来的?

标题的私有部分中的操作如下所示:

QAction *newAction;
    QAction *openAction;
    QAction *aboutQtAction;

    QAction *closeAction;
    QAction *exitAction;
    QAction *selectAllAction;
    QAction *showGridAction;
    QAction *saveAction;
    QAction *saveAsAction;
    QAction *cutAction;
    QAction *copyAction;
    QAction *pasteAction;
    QAction *deleteAction;
    QAction *selectRowAction;
    QAction *selectColumnAction;
    QAction *findAction;
    QAction *goToCellAction;
    QAction *recalculateAction;
    QAction *sortAction;
    QAction *autoRecalcAction;
    QAction *aboutAction;

这是功能:

void MainWindow::createActions()
{
  newAction = new QAction(tr("&New"), this);
  newAction->setIcon(QIcon(":/images/avatar.jpeg"));
  newAction->setShortcut(QKeySequence::New);
  newAction->setStatusTip(tr("Create a new spreadsheet file"));
  connect(newAction, SIGNAL(triggered()), this, SLOT(newFile()));

  for (int i = 0; i < MaxRecentFiles; ++i) {
    recentFileActions[i] = new QAction(this);
    recentFileActions[i]->setVisible(false);
    connect(recentFileActions[i], SIGNAL(triggered()),this, SLOT(openRecentFile()));
  }

  closeAction = new QAction(tr("&Close"), this);
  closeAction->setShortcut(QKeySequence::Close);
  closeAction->setStatusTip(tr("Close this window"));
  connect(closeAction, SIGNAL(triggered()), this, SLOT(close()));

  exitAction = new QAction(tr("E&xit"), this);
  exitAction->setShortcut(tr("Ctrl+Q"));
  exitAction->setStatusTip(tr("Exit the application"));
  connect(exitAction, SIGNAL(triggered()),
        qApp, SLOT(closeAllWindows()));
  selectAllAction = new QAction(tr("&All"), this);
  selectAllAction->setShortcut(QKeySequence::SelectAll);
  selectAllAction->setStatusTip(tr("Select all the cells in the "
                                    "spreadsheet"));
  connect(selectAllAction, SIGNAL(triggered()),
  spreadsheet, SLOT(selectAll()));

  showGridAction = new QAction(tr("&Show Grid"), this);
  showGridAction->setCheckable(true);
  showGridAction->setChecked(spreadsheet->showGrid());
  showGridAction->setStatusTip(tr("Show or hide the spreadsheet's "
                                  "grid"));
  connect(showGridAction, SIGNAL(toggled(bool)),
  spreadsheet, SLOT(setShowGrid(bool)));

  aboutQtAction = new QAction(tr("About &Qt"), this);
  aboutQtAction->setStatusTip(tr("Show the Qt library's About box"));
  connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
  }

这些操作在创建后会添加到createMenus()功能中的菜单中:

void MainWindow::createMenus(){
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAction);
fileMenu->addAction(openAction);
fileMenu->addAction(saveAction);
fileMenu->addAction(saveAsAction);

separatorAction = fileMenu->addSeparator();
for (int i = 0; i < MaxRecentFiles; ++i)
    fileMenu->addAction(recentFileActions[i]);

fileMenu->addSeparator();
fileMenu->addAction(exitAction);
...

有人知道这个错误来自何处?

谢谢! 阿克塞尔

1 个答案:

答案 0 :(得分:1)

createActions()中,您似乎没有初始化openActionsaveActionsaveAsAction - 然后将其插入到菜单中。我猜这是问题所在,除非你没有包含初始化这些特定行为的代码。