1

我的 mainwindpw.ui 完全是空的,我使用了“柴郡猫实现”......当我stackedWidget在我的代码中的表单上发布时,我q->不能使用这个小部件???我哪里错了?我应该在主窗口或主窗口Pvt中设置它??为什么?

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QMap>

#include "aboutdialog.h"
#include "previewwidget.h"

class MainWindowPvt : public QObject
{
    Q_OBJECT

public:
    explicit MainWindowPvt(MainWindow *mw);

    MainWindow *q;

public slots:
    void openPrg();
    void exitApplication();
    void programMode();
    void previewMode();
    void information();

private:
    enum class Actions {
        Open,
        Exit,
        ViewProgram,
        ViewPreview,
        Information
    };

    QMap<Actions, QAction*> actions;
    PreviewWidget *previw;
};

MainWindowPvt::MainWindowPvt(MainWindow *mw) :
    q{mw},
    stacked{new QStackedWidget(this)},
    previw{new PreviewWidget(this)}
{
    // AZIONI
    QAction *act{new QAction("Open", q)};
    act->setShortcut(QKeySequence::Open);
    actions.insert(Actions::Open, act);
    connect(act, &QAction::triggered, this, &MainWindowPvt::openPrg);

    act = new QAction("Exit", q);
    act->setShortcut(QKeySequence::Quit);
    actions.insert(Actions::Exit, act);
    connect(act, &QAction::triggered, this, &MainWindowPvt::exitApplication);

    act = new QAction("Program mode", q);
    act->setShortcut(QKeySequence("Ctrl+2"));
    actions.insert(Actions::ViewProgram, act);
    connect(act, &QAction::triggered, this, &MainWindowPvt::programMode);

    act = new QAction("Preview mode", q);
    act->setShortcut(QKeySequence("Ctrl+3"));
    actions.insert(Actions::ViewPreview, act);
    connect(act, &QAction::triggered, this, &MainWindowPvt::previewMode);

    act = new QAction("Information", q);
    actions.insert(Actions::Information, act);
    connect(act, &QAction::triggered, this, &MainWindowPvt::information);


    // MENU
    QMenu *menu{new QMenu(tr("File"), q)};
    menu->addAction(actions.value(Actions::Open));
    menu->addAction(actions.value(Actions::Exit));
    q->menuBar()->addMenu(menu);

    menu = new QMenu(tr("View"), q);
    menu->addAction(actions.value(Actions::ViewProgram));
    menu->addAction(actions.value(Actions::ViewPreview));
    q->menuBar()->addMenu(menu);

    menu = new QMenu(tr("?"), q);
    menu->addAction(actions.value(Actions::Information));
    q->menuBar()->addMenu(menu);


    // STACKED WIDGET
    q->
}

谢谢

4

0 回答 0