分段错误



我正在尝试使用一些工具栏和菜单构建MainWindow。所以在我的主窗口中。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QAction;
class QMenu;
class QToolBar;
class QStatusBar;

class MainWindow : public QMainWindow
{
    Q_OBJECT
 public:
    MainWindow();
 protected:
    void closeEvent(QCloseEvent *event);
 private slots:
     void open();
     void save();
//void updateStatusBar();
 private:
     void createToolbars();
     void createActions();
     void createMenus();
     void createStatusBar();
 bool loadFile(const QString &fileName);
 bool saveFile(const QString &fileName);
 QToolBar *filetBar;
 QAction *openAction;
 QAction *saveAction;
 QAction *separatorAction;
 QAction *exitAction;
 QStatusBar *stsBar;
 QMenu *fileMenu;
 };
 #endif // MAINWINDOW_H

我有私有变量 QToolbar * filetBar;在.cpp文件中,我打电话给:创建工具栏,即:

#include <QtGui>
#include "mainwindow.h"
#include <QMdiArea>
#include <QMdiSubWindow>
#include <QAction>
#include <QToolBar>
#include <QMenuBar>
#include <QMenu>
#include <QStatusBar>
#include <QFileDialog>
#include <QToolButton>
/

/#include "mdichild.h"

 MainWindow::MainWindow()
 {
    mdiArea = new QMdiArea;
    mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    setCentralWidget(mdiArea);
    createToolbars();
    createActions();
    createMenus();
    createStatusBar();
    setWindowTitle(tr("GUI OPTIMIZER"));
    setUnifiedTitleAndToolBarOnMac(true);
    setWindowIcon(QIcon(":/images/up.jpeg"));
   }
   void MainWindow::createActions()
   {
     openAction = new QAction(QIcon(":images/open.png"), tr("&Open"), this);
     openAction->setShortcut(QKeySequence::Open);
     openAction->setStatusTip(tr("Open your gui (*.al) file"));
     connect(openAction, SIGNAL(triggered()), this, SLOT(open()));
     saveAction = new QAction(QIcon(""), tr("&Save"), this);
saveAction->setShortcut(QKeySequence::Save);
saveAction->setStatusTip(tr("Save optimized gui"));
connect(saveAction, SIGNAL(triggered()), this, SLOT(save()));
exitAction = new QAction(QIcon(""), tr("&Close"), this);
exitAction -> setShortcut(QKeySequence::Close);
connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));
   }
   void MainWindow::createToolbars()
   {
     filetBar = new QToolBar("File", this);
     filetBar = addToolBar(tr("&File"));
     filetBar->addAction(openAction);
   }
   void MainWindow::createMenus()
   {
      fileMenu = menuBar()->addMenu(tr("&File"));
      fileMenu->addAction(openAction);
      fileMenu->addAction(saveAction);
      separatorAction = fileMenu->addSeparator();
      fileMenu->addSeparator();
      fileMenu->addAction(exitAction);
   }

当我运行时,它只是说程序意外完成。当我使用调试器运行时,给了我

信号名称 : SIGSEGV信号含义:分段故障广告线

它显示菜单,并且操作正在工作。知道我该怎么解决吗?谢谢。`

在使用

它们之前,您需要确保每个成员变量在构造函数中初始化为某个合理的值。这意味着对于其中的每一个:

 QToolBar *filetBar;
 QAction *openAction;
 QAction *saveAction;
 QAction *separatorAction;
 QAction *exitAction;
 QStatusBar *stsBar;
 QMenu *fileMenu;

你需要有一个相应的:

filetBar = new QToolBar( /* ... */ );

特别是,您将未初始化的QAction对象传递给小部件。在构造函数中,或在从构造函数调用的单独方法中,应具有如下所示的代码:

 openAction = new QAction("&Open", this);
 saveAction = new QAction("&Save", this);
 // etc.

相关内容

  • 没有找到相关文章

最新更新