Qt-QMainWindow

20 篇文章 0 订阅

main.cpp

#include "qmenutest.h"
#include <QtWidgets/QApplication>
#include "menuwidget.h" 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMenuTest w;
    w.show();
  /*  MenuWidget win;
    win.show();*/

    return a.exec();
}

menuwidget.h

 #pragma once

#include <QWidget>
#include "ui_menuwidget.h"
#include <QDebug>
#include <QMenuBar>

class MenuWidget : public QWidget
{
	Q_OBJECT

public:
	MenuWidget(QWidget *parent = Q_NULLPTR);
	~MenuWidget();
public slots:
	void Hover()
	{
		qDebug() << "Hover";
	}
	void Action1()
	{
		qDebug() << "Action1";
	}
	void Action1(bool ischecked)
	{
		qDebug() << "Action1 = "<<ischecked;
	}
	void Action(QAction* act)
	{
		qDebug() << "Action " << act->text();
	}
	void Hovered(QAction* act)
	{
		//动态菜单
		if (act->text() == QStringLiteral("菜单栏3"))
		{
			qDebug() << "Hovered " << act->text();
			act->menu()->clear();
			act->menu()->addAction(QStringLiteral("菜单3.1"));
			act->menu()->addAction(QStringLiteral("菜单3.2"));
			act->menu()->addAction(QStringLiteral("菜单3.3"));
		}
	}
	void Click()
	{
		//鼠标位置显示菜单
		m1->exec(QCursor::pos());
	}
private:
	QMenu* m1 = NULL;
	Ui::MenuWidget ui;
};

menuwidget.cpp

#include "menuwidget.h"
#include <QToolBar>
#include <QStatusBar>


MenuWidget::MenuWidget(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	//插入菜单栏
	QMenuBar* m = new QMenuBar(this);
	m->resize(width(),m->height());
	//绑定hovered信号,处理QMenuBar的子节点
	connect(m,SIGNAL(hovered(QAction*)),this,SLOT(Hovered(QAction*)));


	//一级菜单
	m1 = m->addMenu(QStringLiteral("菜单1"));
	//包含所有QMenu所有子节点,以及子节点的子节点
	connect(m1,SIGNAL(triggered(QAction*)),this,SLOT(Action(QAction *)));

	//二级菜单
	QAction* a1 = m1->addAction(QStringLiteral("二级菜单1.1"));
	//QAction触发信号
	connect(a1,SIGNAL(triggered()),this,SLOT(Action1()));
	//设置快捷方式
	a1->setShortcut(QString("A"));
	a1->setIcon(QIcon("qt.PNG"));

	QAction* a2 = m1->addAction(QStringLiteral("二级菜单1.2"));
	//QAction鼠标悬停事件
	connect(a2,SIGNAL(hovered()),this,SLOT(Hover()));


	QAction* a3 = m1->addAction(QStringLiteral("二级菜单1.3"));
	//设置可选
	a1->setCheckable(true);
	a2->setCheckable(true);
	a3->setCheckable(true);
	//设置单选
	QActionGroup* ag = new QActionGroup(this);
	ag->addAction(a2);
	ag->addAction(a3);
	ag->setExclusive(true);
	//是否选中事件,触发信号
	connect(a1,SIGNAL(triggered(bool)),this,SLOT(Action1(bool)));

	QMenu* m14 = m1->addMenu(QStringLiteral("二级菜单1.4"));
	m14->addAction(QStringLiteral("三级菜单1.4.1"));
	m14->setIcon(QIcon("qt.PNG"));

	QMenu* m2 = m->addMenu(QStringLiteral("菜单栏2"));
	QMenu* m3 = m->addMenu(QStringLiteral("菜单栏3"));

	//工具栏
	QToolBar* tbar = new QToolBar(this);
	tbar->setGeometry(0,m->height(),width(),30);
	tbar->setIconSize(QSize(30,30));
	tbar->addAction(a1);

	//实现消息定时消失
	QStatusBar* sbar = new QStatusBar(this);
	sbar->setGeometry(0, height() - 30, width(), 30);
	sbar->showMessage(QStringLiteral("测试消息三秒消失!"), 3000);
}

MenuWidget::~MenuWidget()
{
}

ui_menuwidget.h

/********************************************************************************
** Form generated from reading UI file 'menuwidget.ui'
**
** Created by: Qt User Interface Compiler version 5.14.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MENUWIDGET_H
#define UI_MENUWIDGET_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MenuWidget
{
public:
    QAction *actiontest;
    QPushButton *pushButton;

    void setupUi(QWidget *MenuWidget)
    {
        if (MenuWidget->objectName().isEmpty())
            MenuWidget->setObjectName(QString::fromUtf8("MenuWidget"));
        MenuWidget->resize(400, 300);
        actiontest = new QAction(MenuWidget);
        actiontest->setObjectName(QString::fromUtf8("actiontest"));
        actiontest->setCheckable(true);
        pushButton = new QPushButton(MenuWidget);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(90, 120, 93, 28));

        retranslateUi(MenuWidget);
        QObject::connect(pushButton, SIGNAL(clicked()), MenuWidget, SLOT(Click()));

        QMetaObject::connectSlotsByName(MenuWidget);
    } // setupUi

    void retranslateUi(QWidget *MenuWidget)
    {
        MenuWidget->setWindowTitle(QCoreApplication::translate("MenuWidget", "MenuWidget", nullptr));
        actiontest->setText(QCoreApplication::translate("MenuWidget", "test", nullptr));
#if QT_CONFIG(shortcut)
        actiontest->setShortcut(QCoreApplication::translate("MenuWidget", "Ctrl+X", nullptr));
#endif // QT_CONFIG(shortcut)
        pushButton->setText(QCoreApplication::translate("MenuWidget", "PushButton", nullptr));
    } // retranslateUi

};

namespace Ui {
    class MenuWidget: public Ui_MenuWidget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MENUWIDGET_H

qmenutest.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_qmenutest.h"

class QMenuTest : public QMainWindow
{
    Q_OBJECT

public:
    QMenuTest(QWidget *parent = Q_NULLPTR);

private:
    Ui::QMenuTestClass ui;
};

qmenutest.cpp

#include "qmenutest.h"

QMenuTest::QMenuTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    //菜单栏
    this->menuBar()->addAction("TestMenu1");

    //状态栏
    this->statusBar()->showMessage("status Bar");

    //工具栏
    ui.mainToolBar->addAction(QStringLiteral("按钮1"));

    ui.mainToolBar->addAction(QIcon("qt.PNG"),QStringLiteral("按钮二"));

    //文件显示在图标下面
    ui.mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

    //左侧
    {
        QToolBar* t = new QToolBar(this);
        t->addAction(QStringLiteral("左侧"));
        this->addToolBar(Qt::LeftToolBarArea,t);
    }

    //右侧
    {
        QToolBar* t = new QToolBar(this);
        t->addAction(QStringLiteral("右侧"));
        this->addToolBar(Qt::RightToolBarArea, t);
    }
    //底部
    {
        QToolBar* t = new QToolBar(this);
        t->addAction(QStringLiteral("底侧"));
        this->addToolBar(Qt::BottomToolBarArea, t);
    }
}

ui_qmenutest.h

/********************************************************************************
** Form generated from reading UI file 'qmenutest.ui'
**
** Created by: Qt User Interface Compiler version 5.14.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_QMENUTEST_H
#define UI_QMENUTEST_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_QMenuTestClass
{
public:
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QWidget *centralWidget;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *QMenuTestClass)
    {
        if (QMenuTestClass->objectName().isEmpty())
            QMenuTestClass->setObjectName(QString::fromUtf8("QMenuTestClass"));
        QMenuTestClass->resize(600, 400);
        menuBar = new QMenuBar(QMenuTestClass);
        menuBar->setObjectName(QString::fromUtf8("menuBar"));
        QMenuTestClass->setMenuBar(menuBar);
        mainToolBar = new QToolBar(QMenuTestClass);
        mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
        QMenuTestClass->addToolBar(mainToolBar);
        centralWidget = new QWidget(QMenuTestClass);
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        QMenuTestClass->setCentralWidget(centralWidget);
        statusBar = new QStatusBar(QMenuTestClass);
        statusBar->setObjectName(QString::fromUtf8("statusBar"));
        QMenuTestClass->setStatusBar(statusBar);

        retranslateUi(QMenuTestClass);

        QMetaObject::connectSlotsByName(QMenuTestClass);
    } // setupUi

    void retranslateUi(QMainWindow *QMenuTestClass)
    {
        QMenuTestClass->setWindowTitle(QCoreApplication::translate("QMenuTestClass", "QMenuTest", nullptr));
    } // retranslateUi

};

namespace Ui {
    class QMenuTestClass: public Ui_QMenuTestClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_QMENUTEST_H

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值