<1>. 头文件(类声明)

class CPreviewWidge : public QWidget
{
Q_OBJECT
public:
CPreviewWidge( const QString &strPath, QWidget *parent = );
~CPreviewWidge(); QSize sizeHint()const; protected:
void paintEvent(QPaintEvent *e); //九宫图重绘函数 private:
QImage m_imgLTop;        //九宫图图片左上
QImage m_imgLCur;        //九宫图图片左中
QImage m_imgLBut;        //九宫图图片左下 QImage m_imgCTop;        //九宫图图片中上
QImage m_imgCCur;        //九宫图图片中中
QImage m_imgCBut;        //九宫图图片中下 QImage m_imgRTop;        //九宫图图片右上
QImage m_imgRCur;        //九宫图图片右中
QImage m_imgRBut;        //九宫图图片右下
};

<2>. cpp文件(类定义)

CPreviewWidge::CPreviewWidge( const QString &strPath, QWidget *parent )    //传参:九宫图中上图片路径和控件父类对象
: QWidget( parent )
{
int iLeft = strPath.lastIndexOf( "_" );
QString strLeftPath = strPath.left( iLeft ); m_imgLTop = QImage( strLeftPath + "_ltop.png" );
m_imgLCur = QImage( strLeftPath + "_lcur.png" );
m_imgLBut = QImage( strLeftPath + "_lbot.png" ); m_imgCTop = QImage( strLeftPath + "_ctop.png" );
m_imgCCur = QImage( strLeftPath + "_ccur.png" );
m_imgCBut = QImage( strLeftPath + "_cbot.png" ); m_imgRTop = QImage( strLeftPath + "_rtop.png" );
m_imgRCur = QImage( strLeftPath + "_rcur.png" );
m_imgRBut = QImage( strLeftPath + "_rbot.png" );
} CPreviewWidge::~CPreviewWidge()
{
} QSize CPreviewWidge::sizeHint() const
{
int iHeight = m_imgLTop.height() + m_imgLCur.height() + m_imgLBut.height();
int iWidth = m_imgLTop.width() + m_imgCTop.width() + m_imgRTop.width(); return QSize( iWidth, iHeight );
} void CPreviewWidge::paintEvent ( QPaintEvent* e )
{
QWidget::paintEvent( e ); QPainter painter( this );
QRect r = rect(); painter.drawImage( r.topLeft().x(), r.topLeft().y(), m_imgLTop );
painter.drawImage( r.topRight().x() - m_imgRTop.width(), r.topRight().y(), m_imgRTop );
painter.drawImage( r.bottomLeft().x(), r.bottomLeft().y() - m_imgLBut.height(), m_imgLBut );
painter.drawImage( r.bottomRight().x() - m_imgRBut.width(), r.bottomRight().y() - m_imgRBut.height(), m_imgRBut ); QRect rectLCut( r.topLeft().x(), r.topLeft().y() + m_imgLTop.height(),
m_imgLCur.width(), ( r.bottomLeft().y() - r.topLeft().y() ) - m_imgLTop.height() - m_imgLBut.height() );
painter.drawImage( rectLCut, m_imgLCur ); QRect rectRCut( r.topRight().x() - m_imgRTop.width(), r.topRight().y() + m_imgRTop.height(),
m_imgRCur.width(), ( r.bottomLeft().y() - r.topLeft().y() ) - m_imgLTop.height() - m_imgLBut.height() );
painter.drawImage( rectRCut, m_imgRCur ); QRect rectCTop( r.topLeft().x() + m_imgLTop.width(), r.topLeft().y(),
( r.topRight().x() - r.topLeft().x() ) - m_imgLTop.width() - m_imgRTop.width(), m_imgCTop.height() );
painter.drawImage( rectCTop, m_imgCTop ); QRect rectCBot( r.bottomLeft().x() + m_imgLBut.width(), r.bottomLeft().y() - m_imgLBut.height(),
( r.topRight().x() - r.topLeft().x() ) - m_imgLTop.width() - m_imgRTop.width(), m_imgCBut.height() );
painter.drawImage( rectCBot, m_imgCBut ); QRect rectCCur( r.topLeft().x() + m_imgLTop.width(), r.topLeft().y() + m_imgLTop.height(),
( r.topRight().x() - r.topLeft().x() ) - m_imgLTop.width() - m_imgRTop.width(),
( r.bottomLeft().y() - r.topLeft().y() ) - m_imgLTop.height() - m_imgLBut.height() );
painter.drawImage( rectCCur, m_imgCCur );
}

Qt实现九宫图类控件的更多相关文章

  1. Qt 界面使用自己定义控件 &quot;提升为&quot;

    1.效果图 我做了一个很easy的样例,一个能够显示颜色的QLabel,边上有个button,点击,跳出颜色选取的Dialog,然后选择一个颜色.这个QLabel会变成什么颜色. 2.ColorLab ...

  2. Android RecyclerView滚动类控件修改、去掉滑动边界的阴影效果

    前言 滚动类控件,大家都用的很多,如 RecyclerView.NestedSrollView.... 下面以recyclerView为例讲解,其他滚动控件也同理. RecyclerView 滚动列表 ...

  3. PyQt(Python+Qt)学习随笔:布局控件layout的layoutSizeConstraint属性不起作用的问题解决办法

    在<PyQt(Python+Qt)学习随笔:布局控件layout的layoutSizeConstraint属性>中介绍layout的layoutSizeConstraint属性后,反复测试 ...

  4. Android一个炫酷的树状图组织架构图开源控件实现过程

    Android一个炫酷的树状图组织架构图开源控件 文章目录 [1 简介] [2 效果展示] [3 使用步骤] [4 实现基本布局流程] [5 实现自由放缩及拖动] [6 实现添加删除及节点动画] [7 ...

  5. kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件

    该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...

  6. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  7. 基于Qt的第三方库和控件

    ====================== 基于Qt的第三方库和控件 ======================     libQxt --------   http://dev.libqxt.o ...

  8. C#控件系列--文本类控件

    C#控件系列--文本类控件         文本类控件主要包含Label.LinkLabel.Button.TextBox以及RichTextBox. Label 功能         Label用来 ...

  9. 八、pyqt5按钮类控件——QPushButton、QRadioButton、QCheckBox

    pyqt5中常用的按钮类控件有QPushButton.QRadioButton.QCheckBox.QToolButton等.这些按钮类的基类都是QAbstracButton类.所以这些类有部分方法是 ...

随机推荐

  1. Java 9 揭秘(9. 打破模块封装)

    Tips 做一个终身学习的人. 在此章节中,主要介绍以下内容: 什么是打破模块的封装 如何使用命令行选项将依赖项(添加需要)添加到模块 如何使用--add-exports命令行选项导出模块的未导出包, ...

  2. IT行业歧视40岁以上人群为找工作还要谎报年龄[转]

    IT行业歧视40岁以上人群为找工作还要谎报年龄(这样不好) http://www.aliyun.com/zixun/content/2_6_616161.html [赛迪网讯]4月5日消息,许多40多 ...

  3. VBA编程的工程性规划

    看过很多人写的VBA代码,一团一团的,一点规划都没有,为了VBA编程更具工程性,这里讨论一下,并列出自己的一些建议:0.给VBA工程定义一个名字,而非直接使用默认的名称——"VBAProje ...

  4. Jersey +jetty 实现微服务(一)

    微服务:    传输协议基本都是http,数据序列化,协议层目前protocol buffer,Json, xml,Java序列化,最多使用Json.实现以上二点并不难,spring 就可以,但spr ...

  5. Android 自定义 permission

    Android 自定义 permission Android 添加自定义权限 permission-tree 权限的根节点,3个成员都要定义 name 一般来说需要2个".":比如 ...

  6. 第2章 rsync(二):inotify+rsync详细说明和sersync

    本文目录: inotify+rsync 1.1 安装inotify-tools 1.2 inotifywait命令以及事件分析 1.3 inotify应该装在哪里 1.4 inotify+rsync示 ...

  7. jmeter断言:断言条件之间是“或”的关系

    有时,我们在做断言时,需要同时满足一系列条件,这在jmeter自带响应断言中已经实现: 有时,同一请求在不同时间,返回的响应是不同的,而这都是正确的响应,也就是说,我们判断的条件之间是或的关系,此时, ...

  8. Git:常用功能 - 命令行

    1. 正在某个分支进行开发,突然有个紧急BUG需要切换到其他分支进行修复? git add README.md # 将文件添加到暂存区 git stash save "v1.0.0 in d ...

  9. Maven常用的几个核心概念

    在使用Maven的过程中,经常会遇到几个核心的概念,准确的理解这些概念将会有莫大的帮助. 1. POM(Project Object Model)项目对象模型 POM 与 Java 代码实现了解耦,当 ...

  10. 初学Python(五)——元组

    初学Python(五)——元组 初学Python,主要整理一些学习到的知识点,这次是元组. #-*- coding:utf-8 -*- #定义元素 t = (1,2,3) #添加元素 #删除元素 #更 ...