#pragma execution_character_set("utf-8")
#include "MenuTest.h"
#include <qmenu.h>
#include <qmenubar.h>
#include <qaction.h>
#include <qtoolbar.h>
#include <qdebug.h>
#include <qstatusbar.h>
#include <qlabel.h>
#include <qtextedit.h>
#include <qdockwidget.h>
#include <qpushbutton.h>
#include <qdialog.h>
#include <qmessagebox.h>
#include <qfiledialog.h>

MenuTest::MenuTest(QWidget* parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	//UI设置
	// ui.menuBar->addMenu("文件")->addAction("新建");
	菜单栏
	//QMenuBar* menuBar = new QMenuBar(this);
	添加菜单
	//QMenu* pFile = menuBar->addMenu("文件");
	添加菜单项动作
	//QAction* pAction = pFile->addAction("新建");
	//connect(pAction, &QAction::triggered,
	//	[=]()
	//	{
	//		qDebug() << "新建按钮被点击";
	//	});

	//QToolBar* toolBar = addToolBar("工具栏");
	工具栏添加快捷键
	//toolBar->addAction(pAction);

	//菜单栏
	connect(ui.actionnew, &QAction::triggered,
		[=]()
		{
			qDebug() << "新建按钮被点击";
		}
	);

	//对话框
	//模态对话框
	connect(ui.action1, &QAction::triggered,
		[=]()
		{
			QDialog dlg;
			dlg.resize(100, 100),
				dlg.exec();
			qDebug() << "模态对话框被点击";
		}
	);

	//非模态对话框
	connect(ui.action, &QAction::triggered,
		[=]()
		{
			//动态分配空间,结束时才能释放
			//QDialog* dlg1 = new QDialog(this);

			//不指定父对象,使用setAttribute关闭时候自动释放
			QDialog* dlg1 = new QDialog;
			dlg1->setAttribute(Qt::WA_DeleteOnClose);
			dlg1->resize(100, 100),
			dlg1->show();
			qDebug() << "非模态对话框被点击";
		}
	);


	connect(ui.action_3, &QAction::triggered,
		[=]()
		{
			QMessageBox::about(this, "about对话框", "关于对话框");
		}
	);

	connect(ui.action4, &QAction::triggered,
		[=]()
		{
			int ret = QMessageBox::question(this, "问题对话框","Are you ok?");
			switch (ret) {
			case QMessageBox::Yes:
				qDebug() << "I AM OK";
				break;

			case QMessageBox::No:
				qDebug() << "not bad";
				break;
			}
		}
	);
	
	//文件对话框
	connect(ui.action5, &QAction::triggered,
		[=]()
		{
			QString path = QFileDialog::getOpenFileName(this, 
				"open file",
				"../",
			"souce(*.cpp *.h);;text(*.txt);;all(*.*)"//过滤条件
			);
			qDebug() << path;
		}
	);

	//工具栏
	QToolBar* toolBar = addToolBar("工具栏");
	QAction* newAction = new QAction("new");
	connect(newAction, &QAction::triggered,
		[=]()
		{
			qDebug() << "工具栏新建按钮被点击";
		}
	);

	toolBar->addAction(newAction);

	//状态栏
	QLabel* statusLabel = new QLabel(this);
	statusLabel->setText("状态信息");
	ui.statusBar->addWidget(statusLabel);

	//addWidget从左往右添加
	ui.statusBar->addWidget(new QLabel("2", this));

	//addPermanentWidget从左往右添加
	ui.statusBar->addPermanentWidget(new QLabel("3", this));

	//核心控件,设立一个中心
	QTextEdit* textEdit = new QTextEdit(this);
	setCentralWidget(textEdit);

	//浮动窗口
	QDockWidget* dockWidget = new QDockWidget(this);
	//Qt::RightDockWidgetArea代表位置
	addDockWidget(Qt::RightDockWidgetArea, dockWidget);

	//浮动窗口添加控件
	dockWidget->setWidget(new QPushButton("123"));
}

MenuTest::~MenuTest()
{}
#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_MenuTest.h"
#include <qdialog.h>

class MenuTest : public QMainWindow
{
    Q_OBJECT

public:
    MenuTest(QWidget *parent = nullptr);
    ~MenuTest();
    //做成员变量不释放 就不会已完成就退出
   // QDialog dlg1;
private:
    Ui::MenuTestClass ui;
};

//给动作添加icon和提示
	newProjAct = new QAction(QIcon(":/image/newPrj.png"), tr("New Project"), this);
	//给动作设置添加状态信息,鼠标悬停就会在状态栏显示
	newProjAct->setStatusTip(tr("new a project"));
	//工具栏
	newProjAct->setToolTip("New Project");

	//添加到菜单栏
	ui->menuFile->addAction(newProjAct);
	//添加到工具栏
	ui->mainToolBar->addAction(newProjAct);
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐