我们平常的窗体是这样的
,
可我们有时想显示成这样
,
外框不是矩行而是自定义形状,这就是不规则窗体。那么如何实现呢?
分三步走:
1.画默认窗口并添加三个关键类:QPixmap、QBitmap、QPainter
2.添加用来遮罩的部件和资源 。这里的部件选用label 资源选用png文件
QPixmap pixmap(“:/images/*.png”); 如何添加资源文件可参看《QT(7)-QT应用程序主窗口(1)》那篇。
ui->label->setPixmap(pixmap);
ui->label->setMask(pixmap.mask());
3.鼠标触发或者重新绘制
paintEvent
mousePressEvent
代码实例
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent *);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPixmap>
#include <QBitmap>
#include <QPainter>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QPixmap pix;
// 加载图片
pix.load(":/images/images/pic.png");
// 设置窗口大小为图片大小
resize(pix.size());
// 为窗口设置遮罩
setMask(pix.mask());
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
// 从窗口左上角开始绘制图片
painter.drawPixmap(0, 0, QPixmap(":/images/images/pic.png"));
}
void MainWindow::mousePressEvent(QMouseEvent *)
{ // 关闭窗口
close();
}