1. 程式人生 > >3.關於QT中的MainWindow視窗,MenuBar,ToolBar,QuickTip等方面的知識點

3.關於QT中的MainWindow視窗,MenuBar,ToolBar,QuickTip等方面的知識點



1 新建一個空Qt專案

編寫12MainWindow.pro

HEADERS+=\

MyMainWindow.h\

MyView.h

SOURCES+=\

MyMainWindow.cpp\

MyView.cpp

QT+=guiwidgets

MyView.h

#ifndefMYVIEW_H
#defineMYVIEW_H
#include<QWidget>
classMyView:publicQWidget{
Q_OBJECT
public:
explicitMyView(QWidget*parent=0);
void
paintEvent(QPaintEvent*);
signals:
publicslots:
};
#endif//MYVIEW_H

MyView.cpp

#include"MyView.h"
#include<QPainter>
MyView::MyView(QWidget*parent):
QWidget(parent)
{
}
voidMyView::paintEvent(QPaintEvent*)
{
QPainterp(this);
p.fillRect(rect(),Qt::red);
}

MyMainWindow.h

#ifndef
MYMAINWINDOW_H
#defineMYMAINWINDOW_H
#include<QMainWindow>
#include<QLabel>
#include"MyView.h"
#include<QSystemTrayIcon>//通過這個標頭檔案可以讓程式在狀態列顯示icon
classMyMainWindow:publicQMainWindow
{
Q_OBJECT
public:
explicitMyMainWindow(QWidget*parent=0);
QLabel*_label;
MyView*_view;
QSystemTrayIcon
*_icon;
voidpaintEvent(QPaintEvent*);
voidmousePressEvent(QMouseEvent*);
QMenu*_menu;
boolevent(QEvent*event);
booleventFilter(QObject*,QEvent*);
signals:
publicslots:
voidslotOpen();
voidslotActivated(QSystemTrayIcon::ActivationReason);
};
#endif//MYMAINWINDOW_H

MyMainWindow.cpp

#include"MyMainWindow.h"
#include<QApplication>
#include<QMenu>
#include<QMenuBar>
#include<QAction>
#include<QDebug>
#include<QFileDialog>
#include<QToolBar>
#include<QStatusBar>
#include<QLabel>
#include<QPixmap>
#include<QPainter>
#include<QMouseEvent>
#include<QCursor>
#include<QIcon>
MyMainWindow::MyMainWindow(QWidget*parent):
QMainWindow(parent)
{
/*加選單*/
QMenuBar*pMenuBar=menuBar();
QMenu*menu=pMenuBar->addMenu("&File");
_menu=menu;
QAction*openAction=menu->addAction("&Open",this,SLOT(slotOpen()),QKeySequence::Open);
QAction*saveAction=menu->addAction("&Save",this,SLOT(slotOpen()),QKeySequence::Save);
menu->addSeparator();
QAction*closeAction=menu->addAction("&Exit",this,SLOT(close()),QKeySequence::Close);
closeAction->setToolTip("closewindow");
/*toolbar新增工具欄*/
QToolBar*toolBar=this->addToolBar("MyToolBar");
toolBar->addAction(openAction);
toolBar->addAction(saveAction);
toolBar->addAction(closeAction);
/*statusbar*/
QStatusBar*pStatusBar=this->statusBar();
pStatusBar->addWidget(_label=newQLabel("OK"));
_label->setText("<fontcolor=red>Processing...</font>");
/*別的控制元件佔用了之後,剩下的區域都是CentralWidget*/
_view=newMyView;
this->setCentralWidget(_view);
//systemtrayicon
_icon=newQSystemTrayIcon;
_icon->setIcon(QIcon("../bing.ico"));
_icon->setToolTip("Thisistrayicontest");
_icon->show();
_icon->setContextMenu(_menu);
connect(_icon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this,SLOT(slotActivated(QSystemTrayIcon::ActivationReason)));
this->installEventFilter(this);
}
voidMyMainWindow::slotActivated(QSystemTrayIcon::ActivationReasonreason)
{
if(reason==QSystemTrayIcon::Trigger)
{
if(this->isHidden())this->show();
elsethis->hide();
}
}
/**
*@briefMyMainWindow::eventFilter
*@paramo
*@parame
*@return訊息過濾器
*/
boolMyMainWindow::eventFilter(QObject*o,QEvent*e)
{
if(o==(QObject*)this&&e->type()==QEvent::Close)
{
returntrue;
}
returnQMainWindow::eventFilter(o,e);
}
boolMyMainWindow::event(QEvent*ev)
{
qDebug()<<ev;
if(ev->type()==QEvent::Close)
{
returnfalse;
}
returnQMainWindow::event(ev);
}
voidMyMainWindow::mousePressEvent(QMouseEvent*ev)
{
if(ev->button()==Qt::RightButton)
_menu->exec(QCursor::pos());
}
voidMyMainWindow::paintEvent(QPaintEvent*)
{
QPainterp(this);
p.drawPixmap(QPoint(0,0),QPixmap(".../aaa.png"));
}
voidMyMainWindow::slotOpen()
{
QStringstrFile=QFileDialog::getOpenFileName();
qDebug()<<"Openfileis:"<<strFile;
}
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
MyMainWindoww;
w.show();
returnapp.exec();
}

執行結果:

右鍵的時候出現選單