Qt Создать с помощью меню и панели инструментов в отдельном файле класса

Я хотел бы создать графический интерфейс с использованием Qt Creator и запустить обычный проект Qt Application Desktop. Чтобы класс-файлы MainWindow не становились слишком большими, я бы хотел выделить меню и панель инструментов в отдельном классе. Я новичок в Qt, и хотя я искал высоко и низко в Google, я не смог найти подходящий пример. Я работаю в Qt 5.8.

Что у меня есть:

main.cpp:

#include "mainwindow.h"#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "mwmenubar.h"#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"#include "mwmenubar.h"
#include <QWidget>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// Now populate empty menubar & toolbar
MWMenubar *MWmenu = new MWMenubar(this);
//    MWmenu->show();  // Shows a detached menubar (i.e. outside of the main window).

ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

mwmenubar.h

#ifndef MWMENUBAR_H
#define MWMENUBAR_H

#include <QMainWindow>
#include <QMenuBar>
#include <QToolBar>

class QAction;
class QMenu;
class QToolBar;

class MWMenubar : public QMainWindow
{
Q_OBJECT

public:
MWMenubar(QMainWindow *inMainWindow); // Constructor
~MWMenubar();                         // Destructor

private:
QMainWindow  *mainWindow;

private slots:
// Declare function prototypes
void aFileNewCallback();
void aFileOpenCallback();
void aFileExitCallback();

private:
// Declare function prototypes for creating actions and menus
void createActions();
void createMenus();
void createToolbar();

// Define menubar elements
QMenu *mFile;

// Define toolbar elements
QToolBar *tFile;

// Define menubar and toolbar actions
QAction *aFileNew;
QAction *aFileOpen;
QAction *aFileExit;
};

#endif // MWMENUBAR_H

mwmenubar.cpp

#include "mwmenubar.h"#include <QDebug>

MWMenubar::MWMenubar(QMainWindow *parent)
{
mainWindow = parent;

createActions(); // Create all individual menu actions
createMenus();   // Create main window menubar
createToolbar(); // Create main window toolbar
}

MWMenubar::~MWMenubar()
{
// The destructor should not be needed, as the menubar is part of the
// main window and will be deleted when the main window is closed.
}

// Create individual menu action callbacks
void MWMenubar::aFileNewCallback()
{
qDebug() << "Pressing File->New!";
}

void MWMenubar::aFileOpenCallback()
{
qDebug() << "Pressing File->Open!";
}

void MWMenubar::aFileExitCallback()
{
qDebug() << "Pressing File->Exit!";
mainWindow->close();
}

// Function for creating all menu actions
void MWMenubar::createActions()
{
//    const QIcon newIcon = QIcon::fromTheme("document-new", QIcon(":/images/new.png"));
//    aFileNew = new QAction(newIcon, tr("&New..."), this);
aFileNew = new QAction(tr("&New..."), this);
aFileNew->setShortcuts(QKeySequence::New);
aFileNew->setStatusTip(tr("Create a new file"));
connect(aFileNew, &QAction::triggered, this, &MWMenubar::aFileNewCallback);

//    const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png"));
//    aFileOpen = new QAction(openIcon, tr("&Open..."), this);
aFileOpen = new QAction(tr("&Open..."), this);
aFileOpen->setShortcuts(QKeySequence::Open);
aFileOpen->setStatusTip(tr("Open an existing file"));
connect(aFileOpen, &QAction::triggered, this, &MWMenubar::aFileOpenCallback);

aFileExit = new QAction(tr("E&xit"), this);
aFileExit->setShortcuts(QKeySequence::Quit);
aFileExit->setStatusTip(tr("Exit the application"));
connect(aFileExit, &QAction::triggered, this, &MWMenubar::aFileExitCallback);
}

void MWMenubar::createMenus()
{
mFile = mainWindow->menuBar()->addMenu(tr("&File"));
mFile->addAction(aFileNew);
mFile->addAction(aFileOpen);
mFile->addSeparator();
mFile->addAction(aFileExit);
}

void MWMenubar::createToolbar()
{
tFile = mainWindow->addToolBar(tr("File"));
tFile->addAction(aFileNew);
tFile->addAction(aFileOpen);
}

(Для простоты я закомментировал значки для QActions («New» и «Open»)).

Тобар появляется нормально, но я не могу заставить менубар появляться. Я часами пробовал разные вещи, но тщетно. Так что пример кода будет с благодарностью. Я понимаю, что то, что я делаю, может быть совершенно неверным — если так, пожалуйста, покажи мне, что делать.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]