您的位置:首页 > 产品设计 > UI/UE

3.关于QT中的MainWindow窗口,MenuBar,ToolBar,QuickTip等方面的知识点

2014-12-13 23:58 281 查看


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);

voidpaintEvent(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

#ifndefMYMAINWINDOW_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();

}

运行结果:



右键的时候出现菜单



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: