当前位置: 首页 > news >正文

国外创意网站公司如何进行网络推广

国外创意网站,公司如何进行网络推广,网站建设的销售术语,长沙营销网站建设在Qt中绘制不规则控件可通过设置遮罩(Mask)实现。以下是详细步骤: ‌继承目标控件‌:如QPushButton或QWidget。‌重写resizeEvent‌:当控件大小变化时,更新遮罩形状。‌创建遮罩区域‌:使用QRegion或QPain…

在Qt中绘制不规则控件可通过设置遮罩(Mask)实现。以下是详细步骤:

  1. 继承目标控件‌:如QPushButton或QWidget。
  2. 重写resizeEvent‌:当控件大小变化时,更新遮罩形状。
  3. 创建遮罩区域‌:使用QRegion或QPainterPath定义形状(如圆形、多边形)。
  4. 应用遮罩‌:使用setMask方法设置控件的可见区域。
  5. 重写paintEvent‌:绘制控件外观,确保与遮罩一致。
  6. 处理事件区域‌:如重写hitButton检查点击事件是否在遮罩内。

一、示例代码:圆形按钮

#include <QPushButton>
#include <QPainter>
#include <QResizeEvent>
#include <QRegion>class CircleButton : public QPushButton {
public:CircleButton(QWidget *parent = nullptr) : QPushButton(parent) {setFixedSize(100, 100); // 建议设置为正方形以确保正圆}protected:void resizeEvent(QResizeEvent *event) override {// 创建圆形遮罩QRegion region(rect(), QRegion::Ellipse);setMask(region);QPushButton::resizeEvent(event);}void paintEvent(QPaintEvent *event) override {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); // 抗锯齿painter.setBrush(Qt::blue); // 填充颜色painter.drawEllipse(rect()); // 绘制圆形painter.setPen(Qt::white);painter.drawText(rect(), Qt::AlignCenter, "Click Me"); // 文字}bool hitButton(const QPoint &pos) const override {// 判断点击位置是否在圆内QPoint center = rect().center();int radius = width() / 2;int dx = pos.x() - center.x();int dy = pos.y() - center.y();return (dx*dx + dy*dy) <= (radius * radius);}
};

二、示例代码:不规则窗口

#include <QMainWindow>
#include <QPainter>
#include <QRegion>class MainWindow : public QMainWindow {
public:MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {setWindowFlags(Qt::FramelessWindowHint); // 无边框setAttribute(Qt::WA_TranslucentBackground); // 透明背景resize(300, 300);}protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setBrush(Qt::blue);painter.drawEllipse(rect()); // 绘制窗口内容}void resizeEvent(QResizeEvent *event) override {QRegion region(rect(), QRegion::Ellipse);setMask(region); // 设置窗口遮罩}
};

三、图像遮罩创建不规则形状的窗口

文件 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPixmap>
#include <QMouseEvent>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void paintEvent(QPaintEvent *event) override;   // 绘制窗口void mousePressEvent(QMouseEvent *event) override; // 点击事件void mouseMoveEvent(QMouseEvent *event) override;  // 拖动窗口private:QPixmap m_pixmap;      // 存储形状图片QPoint m_dragPos;      // 记录拖动位置bool isPointValid(const QPoint &pos); // 检查点击位置是否有效
};#endif // MAINWINDOW_H

文件 mainwindow.cpp

#include "mainwindow.h"
#include <QPainter>
#include <QBitmap>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{// 加载图片(确保资源路径正确)m_pixmap.load(":/images/shape.png");if (m_pixmap.isNull()) {qWarning("Failed to load image!");return;}// 设置窗口属性setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);setAttribute(Qt::WA_TranslucentBackground);setFixedSize(m_pixmap.size()); // 窗口大小与图片一致// 设置遮罩(仅显示非透明区域)setMask(m_pixmap.mask());
}MainWindow::~MainWindow() {}// 绘制窗口
void MainWindow::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); // 抗锯齿painter.drawPixmap(0, 0, m_pixmap);
}// 检查点击位置是否在非透明区域
bool MainWindow::isPointValid(const QPoint &pos)
{if (m_pixmap.isNull()) return true;return m_pixmap.toImage().pixelColor(pos).alpha() > 0;
}// 鼠标按下事件
void MainWindow::mousePressEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton && isPointValid(event->pos())) {m_dragPos = event->globalPos() - frameGeometry().topLeft();event->accept();} else {event->ignore(); // 透明区域不响应点击}
}// 鼠标拖动事件
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() & Qt::LeftButton) {move(event->globalPos() - m_dragPos);event->accept();}
}

文件 main.cpp

#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

关键代码解释

  1. 设置遮罩

    setMask(m_pixmap.mask()); // 使用图片的 alpha 通道生成遮罩

    这一步使得窗口仅显示图片的非透明区域。

  2. 透明背景

    setAttribute(Qt::WA_TranslucentBackground); 
    setWindowFlags(Qt::FramelessWindowHint);

    确保窗口背景透明,避免残留默认边框。

  3. 点击有效性检查

    bool MainWindow::isPointValid(const QPoint &pos) {return m_pixmap.toImage().pixelColor(pos).alpha() > 0;
    }
    

    通过检查像素的透明度,决定是否响应点击事件。

http://www.dtcms.com/a/465435.html

相关文章:

  • 软考中级习题与解答——第十五章_数据结构与算法应用(2)
  • 在JavaScript / HTML / Node.js中,post方式的Content-Type属性的text的三种编码
  • Linux gdb
  • 源码阅读 LeakCanary
  • Java 网络流式编程
  • java后端工程师进修ing(研一版‖day51)
  • JavaScript Promise 详解:从入门到精通
  • 中山建设银行招聘网站网站设计的评估
  • 深圳制作网站培训机构自己做的网站打开超慢
  • MySQL数据库优化实战提升查询性能的五大核心策略
  • libboost_system-mt-x64.so.1.76.0 和libboost_system-mt-d-x64.so.1.76.0 区别
  • 【11408学习记录】考研数学核心突破:线性代数特征值与特征向量详解+英语长难句精析
  • 深入剖析:基于epoll与主从Reactor模型的高性能服务器设计与实现
  • 非小细胞肺癌与肿瘤相关巨噬细胞:新的治疗策略
  • React Native:发现默认参数children【特殊的prop】
  • Flink进阶:从“会用”到“用明白”的踩坑与实战总结
  • 最专业的礼品网站实例网站优化费用怎么做会计分录
  • 苍穹外卖-工作台实现、Apache POI、导出Excel报表
  • 自定义类型:联合与枚举
  • Java9
  • 基于Spring Boot + Vue 3的乡村振兴综合服务平台
  • Java-145 深入浅出 MongoDB 基本操作详解:数据库查看、切换、创建集合与删除完整教程
  • disable-devtool 网络安全 禁止打开控制台
  • TCP协议的可靠性保障
  • ktv支付订房网站模板商业策划书范文6篇
  • 十一、OpenCV中图形的绘制
  • 用户中心网站设计北京社保网址
  • 安卓13_ROM修改定制化-----如何给安卓手机里安装或者内置数字证书文件 cer类型的证书文件如何转换为可内置文件
  • 仿mudou——Connection模块(连接管理)
  • vue3 + el-upload组件集成阿里云视频点播从本地上传至点播存储