В настоящее время я пишу приложение C++, используя структуру Qt, в которой "основное окно" наследуется от класса QWidget
:
class Draughts : public QWidget
{
Q_OBJECT
public:
explicit Draughts(QWidget *parent = 0);
~Draughts();
private:
Ui::Draughts *ui;
};
И я попытался добавить в приложение простую панель меню, используя следующий код:
Draughts::Draughts(QWidget *parent) :
QWidget(parent),
ui(new Ui::Draughts)
{
ui->setupUi(this);
QWidget *menuWidget = new QWidget;
QMenu *menuGame = new QMenu("Game");
menuGame->addAction("New");
menuGame->addAction("Exit");
QMenu *menuHelp = new QMenu("Help");
menuHelp->addAction("How to Play...");
menuHelp->addAction("About");
//Setup the Application Menu
QMenuBar mainMenu(this);
mainMenu.addMenu(menuGame);
mainMenu.addMenu(menuHelp);
}
Должен ли я использовать класс QMainWindow
вместо класса QWidget
для моего приложения?
Было бы проще использовать QMainWindow
, потому что он обеспечивает удобный menuBar()
:
QMenuBar* mainMenu = this->menuBar();
Но его можно добавить в QWidget
, как и любой другой виджет. Просто не выделяйте его в локальной области, потому что он будет удален после завершения функции. Вместо этого сделайте это с другими виджетами:
QMenuBar mainMenu = new QMenuBar(this);
Вероятно, вы также должны добавить макет к своему виджету и добавить меню в макет, чтобы иметь больше контроля над тем, где он появляется. Вы можете найти этот учебник полезным.