目录
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));
}