3.关于QT中的MainWindow窗口,MenuBar,ToolBar,QuickTip等方面的知识点
1
新建一个空Qt项目
|
编写12MainWindow.pro |
|
HEADERS MyMainWindow.h MyView.h SOURCES MyMainWindow.cpp MyView.cpp QT |
|
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等方面的知识点的更多相关文章
- Qt中的主窗口之菜单栏
1.Qt中的主窗口 主窗口为建立应用程序用户界面提供了一个框架 Qt开发平台中直接支持主窗口的概念 QMainWindow是Qt中主窗口的基类 QMainWindow继承于QWidget是一种容器类型 ...
- Qt 中如何捕获窗口停用和激活的消息
最近一直在用Qt做一个简单的俄罗斯方块的游戏,由于要实现一个暂停游戏的功能,就是当鼠标移出正在运行的游戏,点击电脑桌面上的其他位置时,这个时候游戏暂停.在这里把实现过程简单的记录一下,作为一个学习笔记 ...
- Qt5:Qt中屏幕或窗口截图功能的实现
要想在Qt中实现屏幕或窗口截图功能 ,通常有两种方法: 1 -- 使用 QPixmap 类 2 -- 使用 QScreen类 然而虽然俩两种方法用到的类不相同,但是调用到的类成员函数的函数名称和参 ...
- Qt中如何固定窗口的大小?
这个是从网上转载过来的,我第一次看到的在如下网页:http://blog.csdn.net/cgb0210/article/details/5712980 这里我记录一下,留以后查阅. 一种方法是设 ...
- Qt中重绘制窗口方法:
void CircleWidget::paintEvent(QPaintEvent * event) { QPainter painter(this); int wight = this->wi ...
- Qt中常用知识点
1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegEx ...
- 【C++/Qt】Qt中的parent形参
在 派生类的构造函数初始化列表中 调用 父类的带有参数的构造函数,是为了初始化从父类继承来的成员变量.因为这些变量无法直接初始化,只能采用这种方式初始化. 而在qt中,MainWindow中的某成员变 ...
- Qt中各个widget前后位置的设定(在Qt中,所有问题都要一分为二,QWidget体系和QGraphicsWidget体系)
这两天在总结一些以往project中遇到的问题,正好别组有同事问我关于Qt中各个widget窗口的前后位置是如何定义的,这里就总结一下: 在Qt中,所有问题都要一分为二,讨论两种不同的情况:一个是最常 ...
- QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)
使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的.种类齐全的类及其功能函数,程序员可以在编辑程序的过程中简单地直接调用.关于窗口关闭的操作,在这里指出常用的三个槽,即quit(),exit ...
随机推荐
- 【BZOJ1951】【SDOI2010】古代猪文
Background "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很 ...
- SpringCloud学习之zuul
一.为什么要有网关 我们先看一个图,如果按照consumer and server(最初的调用方式),如下所示 这样我们要面临如下问题: 1. 用户面临着一对N的问题既用户必须知道每个服务.随着服务的 ...
- Linux mint界面过小无法安装(解决方法)
安装Linux mint时,到了分区的时候,有时候会出现界面过小(就是你点击不到确定键). 如下图所示: 大家可以看到下面的确定键无法显示,导致无法安装.网上查了一下都是清一色的下载vwware to ...
- C语言程序设计第五次作业——循环结构
(一)改错题 1.题目:输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下: c = 5 ...
- Hinton's paper Dynamic Routing Between Capsules 的 Tensorflow , Keras ,Pytorch实现
Tensorflow 实现 A Tensorflow implementation of CapsNet(Capsules Net) in Hinton's paper Dynamic Routing ...
- String 类
一.String类String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的final类,不能有类.String类对象创建 ...
- Maven的pom.xml文件结构之基本配置packaging和多模块聚合结构(微服务)
1. packaging packaging给出了项目的打包类型,即作为项目的发布形式,其可能的类型.在Maven 3中,其可用的打包类型如下: jar,默认类型 war ejb ear rar pa ...
- mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法
[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...
- 《剑指offer》全部题目-含Java实现
1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. publi ...
- Node.js系列文章:利用console输出日志文件
通常我们在写Node.js程序时,都习惯使用console.log打印日志信息,但这也仅限于控制台输出,有时候我们需要将信息输出到日志文件中,实际上利用console也可以达到这个目的的,今天就来简单 ...