QT学习笔记Day04:菜单栏、工具栏、状态栏、图像显示

目录

0x00 菜单栏:

0x02 工具栏:

0x03 状态栏:

0x04 图像显示


0x00 菜单栏:

主要用于QMainWindow,QWidget,QDialog也可用

QMenuBar   菜单栏,不可缺少

QMenu 菜单,文本显示,不处理菜单操作

QAction 用来执行菜单动作

效果:

代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->InitMenu();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::InitMenu()
{
    //定义菜单栏
    this->p_MainMenu = new QMenuBar;
    //添加菜单
    QMenu* pMenu = this->p_MainMenu->addMenu("文件");
    //添加菜单项
    QAction* pAction =  pMenu->addAction("打开");
    pAction->setShortcut(QKeySequence("Ctrl+O")); //给菜单项添加快捷键
    //给菜单项关联一个槽函数
    connect(pAction,SIGNAL(triggered()),this,SLOT(SlotsMenuOpen()));





    pMenu = this->p_MainMenu->addMenu("关于");
    QMenu* pSubMenu = pMenu->addMenu("更多");
    pSubMenu->addAction("打印");
    pSubMenu->addAction("输出");


    this->setMenuBar(this->p_MainMenu);
}

void MainWindow::SlotsMenuOpen()
{
    QMessageBox::warning(this,"open","open menu");
}

0x02 工具栏:

效果:

代码:

void MainWindow::InitToolBar()
{
    this->p_ToolBar = new QToolBar(this);
    QAction* pAction = this->p_ToolBar->addAction("打开");
    connect(pAction,SIGNAL(triggered(bool)),this,SLOT(SlotsMenuOpen()));

    pAction = this->p_ToolBar->addAction("编辑");
    connect(pAction,SIGNAL(triggered(bool)),this,SLOT(SlotsMenuOpen()));

    pAction = this->p_ToolBar->addAction("格式");
    connect(pAction,SIGNAL(triggered(bool)),this,SLOT(SlotsMenuOpen()));
    this->addToolBar(this->p_ToolBar);
}

0x03 状态栏:

效果:

代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QLabel>
#include <QPushButton>
#include <QDateTime>
#include <QTimer>
#include <QString>
#include <QMouseEvent>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->InitMenu();
    this->InitToolBar();
    this->InitStatusBar();

    QTimer* pTimer = new QTimer(this);
    pTimer->start(500);
    connect(pTimer,SIGNAL(timeout()),this,SLOT(onTimeOut()));
    //针对于MainWindow需要将光标追踪打开
    this->setMouseTracking(true);
    ui->centralwidget->setMouseTracking(true);
    this->p_ToolBar->setMouseTracking(true);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::InitMenu()
{
    //定义菜单栏
    this->p_MainMenu = new QMenuBar;
    //添加菜单
    QMenu* pMenu = this->p_MainMenu->addMenu("文件");
    //添加菜单项
    QAction* pAction =  pMenu->addAction("打开");
    pAction->setShortcut(QKeySequence("Ctrl+O")); //给菜单项添加快捷键
    //给菜单项关联一个槽函数
    connect(pAction,SIGNAL(triggered()),this,SLOT(SlotsMenuOpen()));





    pMenu = this->p_MainMenu->addMenu("关于");
    QMenu* pSubMenu = pMenu->addMenu("更多");
    pSubMenu->addAction("打印");
    pSubMenu->addAction("输出");


    this->setMenuBar(this->p_MainMenu);
}

void MainWindow::InitToolBar()
{
    this->p_ToolBar = new QToolBar(this);
    QAction* pAction = this->p_ToolBar->addAction("打开");
    connect(pAction,SIGNAL(triggered(bool)),this,SLOT(SlotsMenuOpen()));

    pAction = this->p_ToolBar->addAction("编辑");
    connect(pAction,SIGNAL(triggered(bool)),this,SLOT(SlotsMenuOpen()));

    pAction = this->p_ToolBar->addAction("格式");
    connect(pAction,SIGNAL(triggered(bool)),this,SLOT(SlotsMenuOpen()));


    this->addToolBar(this->p_ToolBar);
}

void MainWindow::InitStatusBar()
{
    this->p_StatusBar = new QStatusBar();
    QLabel* pLabel = new QLabel("行数");
    this->p_StatusBar->addWidget(pLabel); //向状态栏的左边添加widget

    QPushButton* pPushButton = new QPushButton("选择文件");
    this->p_StatusBar->addWidget(pPushButton);


    this->pDisplayCursorPos  = new QLabel("0:0");
    this->p_StatusBar->addPermanentWidget(this->pDisplayCursorPos);

    QDateTime local(QDateTime::currentDateTime()); // 获取当前时间
    this->pLabel = new QLabel(local.toString("yyyy-MM-dd hh:mm:ss"));
    this->p_StatusBar->addPermanentWidget(this->pLabel);//向状态栏的右边添加widget


    this->setStatusBar(this->p_StatusBar);
}

//鼠标移动事件(函数重载)
void MainWindow::mouseMoveEvent(QMouseEvent* ev)
{
    //处理鼠标移动的响应
    QString mousePos = QString("%1 %2").arg(ev->pos().x()).arg(ev->pos().y());
    this->pDisplayCursorPos->setText(mousePos);

}

void MainWindow::SlotsMenuOpen()
{
    QMessageBox::warning(this,"open","open menu");
}

void MainWindow::onTimeOut()
{
    QDateTime local(QDateTime::currentDateTime()); // 获取当前时间
    this->pLabel->setText(local.toString("yyyy-MM-dd hh:mm:ss"));
}

0x04 图像显示

1.使用PainterEvent显示

2.使用QLabel显示

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>
#include <QImage>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void InitWindow();



public:
    void paintEvent(QPaintEvent *event);
    void mousePressEvent(QMouseEvent *event);


private:
    Ui::MainWindow *ui;
    QLabel* pDisplayImage;
    QImage  QImage;
};
#endif // MAINWINDOW_H

源文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>
#include <QPixmap>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSpacerItem>
#include <QMatrix>
#include <QImage>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->InitWindow();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::InitWindow()
{
    QHBoxLayout* pHBoxLayout = new QHBoxLayout();
    QSpacerItem* pSpaceItem = new QSpacerItem(1,1,QSizePolicy::Expanding,QSizePolicy::Minimum);
    pHBoxLayout->addItem(pSpaceItem);

    this->pDisplayImage = new QLabel();
//    this->pDisplayImage->setAutoFillBackground(true); //自动填充背景
//    this->pDisplayImage->setPalette(QPalette(Qt::blue)); //修改背景颜色为blue
    this->QImage.load("/usr/local/go/doc/gopher/ref.png");
    this->pDisplayImage->setPixmap(QPixmap::fromImage(this->QImage));
//    this->pDisplayImage->setPixmap(QPixmap("/usr/local/go/doc/gopher/ref.png"));



    pHBoxLayout->addWidget(this->pDisplayImage);

    pSpaceItem = new QSpacerItem(1,1,QSizePolicy::Expanding,QSizePolicy::Minimum);
    pHBoxLayout->addItem(pSpaceItem);

    QVBoxLayout* pVBoxLayout = new QVBoxLayout();
    pSpaceItem = new QSpacerItem(1,1,QSizePolicy::Minimum,QSizePolicy::Expanding);
    pHBoxLayout->addItem(pSpaceItem);

    pVBoxLayout->addLayout(pHBoxLayout);

    pSpaceItem = new QSpacerItem(1,1,QSizePolicy::Minimum,QSizePolicy::Expanding);
    pHBoxLayout->addItem(pSpaceItem);

    ui->centralwidget->setLayout(pVBoxLayout);

}

//窗口绘制的事件(函数重载)
//比如窗口大小发生变换、拖动窗口、激活到不激活
void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pix;
    pix.load("/usr/local/go/doc/gopher/ref.png");
//  painter.drawPixmap(0,0,100,100,pix);
    //x,y,width,height,图片

    painter.drawPixmap(0,0,pix,50,50,100,100);
    //x,y,图片,从图片什么地方开始截取,宽,高
}

//鼠标点击事件(函数重载)
void MainWindow::mousePressEvent(QMouseEvent *event)
{
  //缩放
//  QMatrix matrix;
//  matrix.scale(1.5,1.5);
//  this->QImage = this->QImage.transformed(matrix);
//  this->pDisplayImage->setPixmap(QPixmap::fromImage(this->QImage));

    //旋转
//    QMatrix matrix;
//    matrix.rotate(90);
//    this->QImage = this->QImage.transformed(matrix);
//    this->pDisplayImage->setPixmap(QPixmap::fromImage(this->QImage));
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值