1
新建一个空Qt项目

编写12MainWindow.pro

HEADERS
+=
\

MyMainWindow.h
\

MyView.h

SOURCES
+=
\

MyMainWindow.cpp
\

MyView.cpp

QT
+=
gui widgets

MyView.h

#ifndef MYVIEW_H
#define MYVIEW_H
 
#include <QWidget>
 
class MyView:public QWidget{
    Q_OBJECT
public:
    explicit MyView(QWidget *parent);
    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);
}

MyMainWindow.h

#ifndef MYMAINWINDOW_H
#define MYMAINWINDOW_H
 
#include <QMainWindow>
#include <QLabel>
#include "MyView.h"
#include <QSystemTrayIcon>  //通过这个头文件可以让程序在状态栏显示icon
 
class MyMainWindow:public QMainWindow
{
    Q_OBJECT
public:
    explicit MyMainWindow(QWidget *parent);
 
    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();
    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("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);
 
    //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)));
 
    this->installEventFilter(this);
}
 
void MyMainWindow::slotActivated(QSystemTrayIcon::ActivationReason reason)
{
    if(reason == QSystemTrayIcon::Trigger)
    {
        if(this->isHidden()) this->show();
        else this->hide();
    }
}
 
/**
 * @brief MyMainWindow::eventFilter
 * @param o
 * @param e
 * @return 消息过滤器
 */
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();
}

运行结果:

右键的时候出现菜单

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

  1. Qt中的主窗口之菜单栏

    1.Qt中的主窗口 主窗口为建立应用程序用户界面提供了一个框架 Qt开发平台中直接支持主窗口的概念 QMainWindow是Qt中主窗口的基类 QMainWindow继承于QWidget是一种容器类型 ...

  2. Qt 中如何捕获窗口停用和激活的消息

    最近一直在用Qt做一个简单的俄罗斯方块的游戏,由于要实现一个暂停游戏的功能,就是当鼠标移出正在运行的游戏,点击电脑桌面上的其他位置时,这个时候游戏暂停.在这里把实现过程简单的记录一下,作为一个学习笔记 ...

  3. Qt5:Qt中屏幕或窗口截图功能的实现

    要想在Qt中实现屏幕或窗口截图功能 ,通常有两种方法: 1  -- 使用 QPixmap 类 2  -- 使用 QScreen类 然而虽然俩两种方法用到的类不相同,但是调用到的类成员函数的函数名称和参 ...

  4. Qt中如何固定窗口的大小?

    这个是从网上转载过来的,我第一次看到的在如下网页:http://blog.csdn.net/cgb0210/article/details/5712980  这里我记录一下,留以后查阅. 一种方法是设 ...

  5. Qt中重绘制窗口方法:

    void CircleWidget::paintEvent(QPaintEvent * event) { QPainter painter(this); int wight = this->wi ...

  6. Qt中常用知识点

    1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegEx ...

  7. 【C++/Qt】Qt中的parent形参

    在 派生类的构造函数初始化列表中 调用 父类的带有参数的构造函数,是为了初始化从父类继承来的成员变量.因为这些变量无法直接初始化,只能采用这种方式初始化. 而在qt中,MainWindow中的某成员变 ...

  8. Qt中各个widget前后位置的设定(在Qt中,所有问题都要一分为二,QWidget体系和QGraphicsWidget体系)

    这两天在总结一些以往project中遇到的问题,正好别组有同事问我关于Qt中各个widget窗口的前后位置是如何定义的,这里就总结一下: 在Qt中,所有问题都要一分为二,讨论两种不同的情况:一个是最常 ...

  9. QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)

    使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的.种类齐全的类及其功能函数,程序员可以在编辑程序的过程中简单地直接调用.关于窗口关闭的操作,在这里指出常用的三个槽,即quit(),exit ...

随机推荐

  1. 内存管理——linux内核学习

    买了<深入Linux内核架构>这本书准备了解一下linux内核机制.但是最开始看了十几页感觉看着很累,本来都准备弃了 过了段时间看见一个面经有linux内核的内容,于是就照着那个先把内存管 ...

  2. ●SPOJ 8222 NSUBSTR–Substrings

    题链: http://www.spoj.com/problems/NSUBSTR/题解: 后缀自动机. 不难发现,对于自动机里面的一个状态s, 如果其允许的最大长度为maxs[s],其right集合的 ...

  3. .htaccess rewrite 规则详细说明

    rewrite的语法格式: RewriteEngine On #要想rewrite起作用,必须要写上哦 RewriteBase url-path #设定基准目录,例如希望对根目录下的文件rewrtie ...

  4. day5 liaoxuefeng---virtualenv、图形界面、网络编程、电子邮件

    一.virtualenv 二.图形界面 三.网络编程 四.电子邮件

  5. day4 liaoxuefeng---函数

    一.调用函数: 调用abs函数:取绝对值函数, >>> abs(100) 100 >>> abs(-20) 20 >>> abs(12.34) 1 ...

  6. IntelliJ IDEA光标变粗 backspace无法删除内容解决方法

    进入了vim插件 1.ctrl+alt+s快捷键打开Settings 2.选择左侧列表中的Plugins 3.在右侧面板的搜索框中搜索IdeaVim 4.将复选框中的钩子去掉 backspace成了其 ...

  7. SVN/GIT精简使用教程

        MAC 显示点文件 显示:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏:defaults write com. ...

  8. iis部署python运行环境

    IIS部署 1.启用或者关闭windows功能,选择安装CGI,我这里已经安装过了. 2.安装后重新打开IIS看到CGI 3.配置ISAPI和CGI限制 4.右上角添加,路径是python安装路径,注 ...

  9. Window下使用ftp命令往Linux中发送文件

    操作步骤:首先,切换到文件目录1.ftp ip地址2.连接成功后,输入正确的用户名和密码.3.binary(表示以二进制的格式传送)4.put/get 文件名(或文件的绝对路径) 退出:bye

  10. sourcestress 问题解决方案

    描述:在Windows系统下,在保证GitHub上的账号和密码正确的情况下,在push时候,输入正确的账号和密码后,却是提醒无效的账户密码. 解决方法:在C:\Users\...\AppData\Lo ...