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

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_OBJECT
public:
    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_OBJECT
public:
    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);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值