环境配置 :MinGW + QT 5.12

效果图:


其实这个缩略图就是模仿Chrome书签栏拖拽书签时的缩略图(如下图所示)。主要是重写QWidget的paintEvent函数。


thumbnail类继承自QWidget

  • thumbnail.h文件
#define RADIUS 17             //窗口边角的弧度
#define ELLIPSE_RADIUS 12     //内部小圆半径
#define RECT 10               //图标长/宽的一半
#define TEXT_LENGTH 100       //文字长度class thumbnail : public QWidget
{Q_OBJECT
public:thumbnail(QWidget *parent = nullptr);void setupthumbnail(QIcon icon, QString str);void setIconSize(int size);private:QPushButton *ImageButton = nullptr;QLabel *TextLabel = nullptr;private:void initUi();void paintEvent(QPaintEvent *);
};
  • thumbnail.c文件
thumbnail::thumbnail(QWidget *parent) :QWidget(parent)
{initUi();
}void thumbnail::initUi()
{setWindowFlags(Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);setFixedSize(140, 34);ImageButton = new QPushButton(this);ImageButton->setFixedSize(20, 20);ImageButton->setIconSize(QSize(20, 20));ImageButton->setFlat(true);ImageButton->setStyleSheet("QPushButton{border:0px solid rgb(0, 0, 0);}");ImageButton->setFocusPolicy(Qt::NoFocus);ImageButton->move(RADIUS - RECT, RADIUS - RECT);TextLabel = new QLabel(this);TextLabel->setFixedSize(TEXT_LENGTH, 20);TextLabel->setAlignment(Qt::AlignVCenter);TextLabel->setFont(QFont("Microsoft YaHei", 8, QFont::Normal));TextLabel->setStyleSheet("QLabel{color:rgba(255, 255, 255, 255); border:0px solid rgb(0, 0, 0);}");TextLabel->setFocusPolicy(Qt::NoFocus);QHBoxLayout *layout = new QHBoxLayout(this);layout->setSpacing(0);layout->addWidget(TextLabel);layout->setContentsMargins(2 * RADIUS, 0, 0, 2);
}void thumbnail::setupthumbnail(QIcon icon, QString text)
{ImageButton->setIcon(QIcon(icon));TextLabel->setText(text);int textSize = fontMetrics().width(text);  //字符超长检测if(textSize > TEXT_LENGTH){QString Elide_text = fontMetrics().elidedText(text, Qt::ElideRight, TEXT_LENGTH);TextLabel->setText(Elide_text);}
}void thumbnail::setIconSize(int size)
{ImageButton->setIconSize(QSize(size, size));
}void thumbnail::paintEvent(QPaintEvent *)
{QPainter Painter(this);Painter.setRenderHint(QPainter::Antialiasing, true);Painter.setPen(Qt::NoPen);Painter.setBrush(QColor(114, 164, 250, 200));QPainterPath PainterPath;PainterPath.addRoundedRect(QRect(0, 0, width(), height()), RADIUS, RADIUS);  //RectPainterPath.addEllipse(RADIUS - ELLIPSE_RADIUS, RADIUS - ELLIPSE_RADIUS, ELLIPSE_RADIUS * 2, ELLIPSE_RADIUS * 2);  //除去内部小圆Painter.drawPath(PainterPath);Painter.setBrush(QColor(255, 255, 255, 200));Painter.drawEllipse(RADIUS - ELLIPSE_RADIUS, RADIUS - ELLIPSE_RADIUS, ELLIPSE_RADIUS * 2, ELLIPSE_RADIUS * 2);  //内部小圆重新上色
}
环境配置 :MinGW + QT 5.12

Qt绘制形状不规则窗口(一)相关推荐

  1. Qt绘制形状不规则窗口(二)

    环境配置 :MinGW + QT 5.12 效果图(红色部分是桌面背景颜色): 下面这张图片有助于分析(窗口边角弧度BORDER_RADIUS没有注明): TestArrowWidget类继承自QWi ...

  2. QT不规则窗口的移动原理和证明/QT窗口背景透明(附代码实现)

    有些情况下,我们需要实现不规则窗口,比如在软件的加载窗口,可以使用背景透明的图片填充窗口,从而创建炫酷的不规则窗口.下面介绍使用背景透明图片设计不规则窗口以及实现鼠标拖拽不规则窗口的方法. 首先,我们 ...

  3. Qt:Qt实现具有反锯齿的圆角窗口:不规则窗口

    @import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHi ...

  4. CreateWindow创建异形窗口(不规则窗口) - WINDOWS API 第三弹 异形窗口。

    本期将自己从底层中抽离出来,来搞点UI设计相关的,毕竟UI是本人强项(矮子里面拔高个吧).你的UI界面是不是都是矩形框,你有想过其他形状的界面吗?是不是感觉计算机应用就应该是方方正正的.答案肯定是NO ...

  5. linux qt绘框,Qt绘制异形窗体

    异形窗体即不规则窗体,一般采用png图片,一般绘制异形窗体分两步: 1.设置遮罩区 2.绘制图片 使用png图片的透明部分作为遮罩区,然后绘制图片,这样我们就看到一个只绘制了非透明部分的图形,废话少说 ...

  6. python制作窗口界面_python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例

    窗口背景主要包括,背景色与背景图片,设置窗口背景有三种方法 使用QSS设置窗口背景 使用QPalette设置窗口背景 实现PainEvent,使用QPainter绘制背景 QSS设置窗口背景 在QSS ...

  7. Qt Creator形状

    Qt Creator形状 形状 长方形 形状 您可以使用Rectangle类型在"表单编辑器"中绘制基本形状. 库中的大多数视觉类型都是基于项目类型的.即使它本身没有视觉外观(例如 ...

  8. QT绘制多边形-----五边形

    *QT绘制多边形 今天学习qt绘制多边形的绘制 1.先创建一个新项目Application->Qt Widgets Application 2.在头文件.h添加: protected: //在保 ...

  9. 如何用Qt绘制一颗好看的二叉树

    原创~~作者码字不易,如需转载请注明出处,谢谢~ 欢迎来我的博客小站(Aayu Yain = 学无止境 = 阿宇的可爱博客)逛一逛,有惊喜呦~ 最近在学习数据结构二叉树,通过在C++控制台界面已实现了 ...

最新文章

  1. 我在学习springboot和vue前后台连接时碰到的问题记录!(跨域问题)
  2. 解读MD07中可供货天数的计算
  3. 直播预告丨B2B 企业如何高效获客增长?
  4. Git 系列(二):初步了解 Git
  5. javabean与json转换(fastjson与jackson两个版本)
  6. Free SQLSever 2008的书
  7. Ubuntu 18.04LTS系统设置窗口打不开或者消失解决办法
  8. 关于Oracle默认用户名system密码不正确登录不上解决方案
  9. 利用intellij idea工具如何反编译.jar
  10. python tts 离线 linux_ubuntu16.04安装科大讯飞Linux SDK实现离线语音合成(TTS)
  11. linux下轻松修改pdf文件
  12. DID会固定年份吗_你了解渐进式DID平行趋势图的几种画法吗?
  13. tk/tkx canvas区域放大的代码
  14. JS 之Node节点的 属性、方法 获取
  15. 精伦的开发盒子USB上外挂SD卡路径
  16. Linux 查看文件
  17. 10Redis--主从复制 非常重要、一主二仆、薪火相传、反客为主、哨兵模式
  18. 2023美国大学生数学建模竞赛(美赛)思路代码
  19. cmseasy(易通CMS) 注入漏洞 上传漏洞 爆路径ODAY(含修复)
  20. 把一个数随机分成n份,随机数字和等于总数 PHP代码

热门文章

  1. 默认地址路径修改_修改Docker默认路径
  2. mysql多字段分库分表基因码_一文学会常用 MySQL 分库分表方案
  3. mac mysql打不开闪一下_mac系统上 MySQL Workbench意外退出,再也打不开
  4. 利用Python Matplotlib库做简单的视觉化
  5. python 安装第三方库/包(命令/详细注释),如安装pyinstaller库
  6. flowable activiti 回退 驳回_驳回复审中图文组合商标与图形商标不近似性如何论述?...
  7. HNU 程序设计课 函数公式题
  8. P9:卷积神经网络的工程实践技巧
  9. 牛客 2021年度训练联盟热身训练赛第二场 C题Tip to be Palindrome
  10. 计算机视觉CV中的论文写作英语(by Youki)