我正在尝试使用一些工具栏和菜单构建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.