1. 程式人生 > >【Qt】選單欄、工具欄、狀態列、右鍵選單的實現

【Qt】選單欄、工具欄、狀態列、右鍵選單的實現

在QMainWidget基礎上實現選單欄、工具欄、狀態列、右鍵選單。
標頭檔案:

#ifndef GWDEMO_H
#define GWDEMO_H

#include <QMainWindow>
#include <QMenu>
#include <QAction>

namespace Ui {
class GWDemo;
}

class GWDemo : public QMainWindow
{
	Q_OBJECT

public:
	explicit GWDemo(QWidget *parent = 0);
	~GWDemo();
private slots:
void slotActionNew(); void slotContextMenu(QPoint pos);//右鍵選單,也叫上下文選單 private: void init(); void createActions(); void createMenus(); void createToolBar(); private: Ui::GWDemo *ui; QMenu *m_pMenuFile; QAction *m_pActionNew; QToolBar *m_pToolBarFile; }; #endif // GWDEMO_H

實現檔案

#include "GWDemo.h"
#include "ui_GWDemo.h"

#include <QDebug>

GWDemo::GWDemo(QWidget *parent) :
	QMainWindow(parent),
	ui(new Ui::GWDemo)
{
	ui->setupUi(this);
	init();
	createActions();
	createMenus();
	createToolBar();
}

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

void GWDemo::slotActionNew()
{
	qDebug() << "new action";
}

void GWDemo::slotContextMenu(QPoint pos)
{
	qDebug() << "centext Menu";
	QMenu menu(this);
	menu.addAction(m_pActionNew);
	menu.exec(mapToGlobal(pos));
}

void GWDemo::init()
{
	//觸發右鍵選單
	this->setContextMenuPolicy(Qt::CustomContextMenu);
	connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));
}

void GWDemo::createActions()
{
	m_pActionNew = new QAction("&New", this);
	m_pActionNew->setIcon(QIcon(":/ico/ico/new.png"));
	m_pActionNew->setShortcut(QKeySequence::New);//設定快捷鍵
	m_pActionNew->setStatusTip("Create a new file");//在狀態列顯示
	m_pActionNew->setShortcutVisibleInContextMenu(true);
	connect(m_pActionNew, SIGNAL(triggered(bool)), this, SLOT(slotActionNew()));
}

void GWDemo::createMenus()
{
	m_pMenuFile = menuBar()->addMenu("&File");//方便鍵盤操作:Alt+F來選中
	m_pMenuFile->addAction(m_pActionNew);
}

void GWDemo::createToolBar()
{
	m_pToolBarFile = addToolBar("&File");
	m_pToolBarFile->addAction(m_pActionNew);
}