我正在尝试使用一些工具栏和菜单构建MainWindow。 所以在我的mainwindow.h中
#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文件中, 我打电话给: createToolbars是:
#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 信号含义:分段故障 广告
它显示菜单,并且操作正在运行。 知道怎么解决它? 谢谢。 `
答案 0 :(得分:1)
在使用它们之前,您需要确保每个成员变量在构造函数中初始化为一些合理的值。这意味着对于以下每一个:
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.