一起看代码来玩玩QT之12 MainWindow(menubar menu ……)

来源:互联网 发布:echarts 省市区 json 编辑:程序博客网 时间:2024/05/29 15:26

MyMainWindow.h

<pre name="code" class="cpp">#ifndef MYMAINWINDOW_H#define MYMAINWINDOW_H#include <QMainWindow>#include <QLabel>#include "MyView.h"#include <QSystemTrayIcon>class MyMainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MyMainWindow(QWidget *parent = 0);    QLabel* _label;    MyView* _view;    QSystemTrayIcon* _icon;    void paintEvent(QPaintEvent *);    void mousePressEvent(QMouseEvent *);    QMenu* _menu;    bool event(QEvent *event);    bool eventFilter(QObject *, QEvent *);signals:public slots:    void slotOpen();    void slotActivated(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();  //menuBar() 是QMainWindow 独有;    QMenu* menu = pMenuBar->addMenu("&File");    _menu = menu;    QAction* openAction = menu->addAction("&Open", this, SLOT(slotOpen()), QKeySequence::Open); //QkeySequence  快捷键 if u write ctr + o, all system is ctr+o    QAction* saveAction = menu->addAction("&Save", this, SLOT(slotOpen()), QKeySequence::Save);    menu->addSeparator();   //分隔线    QAction* closeAction = menu->addAction("&Exit", this, SLOT(close()), QKeySequence::Close);    closeAction->setToolTip("close window");    /* toolbar */    QToolBar* toolBar = this->addToolBar("MyToolBar");    toolBar->addAction(openAction);    toolBar->addAction(saveAction);    toolBar->addAction(closeAction);    /* status bar */    QStatusBar* pStatusBar = this->statusBar();    pStatusBar->addWidget(_label = new QLabel("OK"));    _label->setText("<font color=red>Processing....</font>");    /* 别的控件占用了之后,剩下的区域都是CentralWidget */    _view = new MyView;    this->setCentralWidget(_view); // centralwidget 会随着非centralwidget的移动而移动    // system tray icon    _icon = new QSystemTrayIcon;    _icon->setIcon(QIcon("../bing.ico"));    _icon->setToolTip("This is tray icon test");    _icon->show();    _icon->setContextMenu(_menu);    connect(_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),            this, SLOT(slotActivated(QSystemTrayIcon::ActivationReason)));  //软件隐藏到任务栏 或 显示到桌面   tray:托盘    this->installEventFilter(this);}void MyMainWindow::slotActivated(QSystemTrayIcon::ActivationReason reason){    if(reason == QSystemTrayIcon::Trigger)    {        if(this->isHidden()) this->show();        else this->hide();    }}/////////////////bool MyMainWindow::eventFilter(QObject *o, QEvent *e){    if(o == (QObject*)this && e->type() == QEvent::Close)    {        return true;    }    return QMainWindow::eventFilter(o, e);}bool MyMainWindow::event(QEvent *ev){    qDebug() << ev;    if(ev->type() == QEvent::Close)    {        return false;    }    return QMainWindow::event(ev);}/////////////void MyMainWindow::mousePressEvent(QMouseEvent *ev){    if(ev->button() == Qt::RightButton)        _menu->exec(QCursor::pos());}void MyMainWindow::paintEvent(QPaintEvent *){    QPainter p(this);    p.drawPixmap(QPoint(0, 0), QPixmap("../aaa.png"));}void MyMainWindow::slotOpen(){    QString strFile = QFileDialog::getOpenFileName();    qDebug() << "Open file is:" << strFile;}int main(int argc, char* argv[]){    QApplication app(argc, argv);    MyMainWindow w;    w.show();    return app.exec();}

MyView.h

#ifndef MYVIEW_H#define MYVIEW_H#include <QWidget>class MyView : public QWidget{    Q_OBJECTpublic:    explicit MyView(QWidget *parent = 0);    void paintEvent(QPaintEvent *);signals:public slots:};#endif // MYVIEW_H

MyView.cpp

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


1 0
原创粉丝点击