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

QWidget::insertAction Attempt to insert null action at runtime

本文关键字:插入 null 操作 运行时 insertAction QWidget      更新时间:2023-10-16

因此,我试图在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);
...

有人知道这个错误是从哪里来的吗?

谢谢!Axel

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