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

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 = 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();
    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中如何固定窗口的大小?

    QT中如何固定窗口的大小? 一种方法是设置它的最大大小和最小大小,并且使它们的值相等,都等于当前你设置的窗口尺寸.简单的示例: setMinimumSize(370, 150);setMaximumS ...

  2. windows卸载qt_如何在Qt中显示一个窗口并在关闭后立即将其删除?

    作为一个非常简单的例子,我想在按下按钮时在Qt中显示一个对话框.通常的模式(在我正在申请的应用程序中)似乎如下: class MainWindow { ... private slots: butto ...

  3. Qt中如何使窗口隐藏/最小化到托盘

    Qt中如何实现自己的托盘功能,Qt自带的demo也很明了,这里我们就来实现自己的一个托盘... 功能:窗口最小化后或者点击"hide"按钮将窗口隐藏到托盘. 通常最小化的窗口会在任 ...

  4. 在qt中获取halcon窗口图片_Qt联合HALCON显示文件夹图片及初步处理

    1.先上图 2.头文件 1 #ifndef MAINWINDOW_H2 #define MAINWINDOW_H 3 4 #include 5 #include 6 #include 7 #inclu ...

  5. qt中opengl窗口的创建

    该笔记借鉴自 : "懂deeee珍惜"的 现代OpenGL+Qt学习笔记之二:程序框架 "爱种鱼的猫"的 QT中使用OpenGL(0)--创建一个窗口 引用引自 ...

  6. Qt中的QMainWindow

    文章目录 1 Qt中的QMainWindow简介 1.1 应用程序中的主窗口 1.2 QMainWindow 2 QMainWindow中的菜单栏 3 QMainWindow中的工具栏 4 QMain ...

  7. Qt中的QDialog

    文章目录 1 Qt中的QDialog 1.1 QDialog简介 1.2 模态对话框和非模态对话框 1.3 对话框的返回值 2 登陆对话框实例分析 2.1 分析 2.2 代码实现 2.3 登录对话框的 ...

  8. Qt的MDI中多个子窗口响应一个菜单事件的优雅实现(动态slot)

    问题: 用过MFC的人都知道,MDI中,某个菜单或者按钮,在视图中可以添加响应函数,在文档中也可以添加响应函数,在框架中也可以添加它的响应函数,优先级分别是视图.文档.框架,而且MFC自动将消息发给当 ...

  9. 【Qt】MainWindow窗口状态栏

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 显示菜单动作状态 04. 显示临时信息 05. 显示正常信息 06. 显示永久信息 07. 附录 01. 概述 在程序主窗 ...

最新文章

  1. python二手房课程设计_【Python】赶集网二手房爬虫 (可扩展)
  2. linux 查看lv格式,linux lv pv lv 命令
  3. NOIP模拟题——dun
  4. JS的正则表达式[收藏]
  5. 多级缓存中的一级缓存全网流量分发CDN
  6. LeetCode每日一题 52. N皇后 II
  7. k8s extender_Windows Home Server的Drive Extender的9种选择
  8. css中的媒体查询_CSS中的媒体查询
  9. Java中的秒表-StopWatch
  10. css3兼容性问题归纳
  11. JVM内存管理 (转)
  12. 详细解读二叉树基本操作
  13. Redis面经:重新梳理了 5 种数据类型的用法和应用场景
  14. 《Using OpenRefine》翻译~2
  15. Task08|文本数据|joyfulpandas
  16. c#窗体开发俄罗斯方块小游戏
  17. BLE学习(4):蓝牙地址类型和设备的隐私
  18. Password verification failed
  19. 京淘商城后台管理系统
  20. 【数据可视化应用】绘制森林图(附Python和R语言代码)

热门文章

  1. 电气实现:蒙特卡洛法 模拟多台电动汽车有序充放电负荷和(python实现)
  2. Spring IoC(一)IoC容器的设计与实现:BeanFactory与ApplicationContext
  3. OpenCASCADE绘制测试线束:布尔运算命令之检查命令
  4. wxWidgets:演示笔记本notebook使用
  5. boost::gregorian模块实现以天为单位显示到新年的时间量的测试程序
  6. 宏BOOST_TEST_TRAIT_TRUE的用法
  7. ITK:两个图像的像素分割
  8. ITK:创建高斯导数内核
  9. DCMTK:测试DcmSCPPool类,包括DcmSCP和DcmSCU交互
  10. VTK:Texture之TexturePlane