Qt实现九宫图类控件

<1>. 头文件(类声明)
class CPreviewWidge : public QWidget
{
    Q_OBJECT
public:
    CPreviewWidge( const QString &strPath, QWidget *parent = 0);
    ~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 );
}

时间: 2024-11-25 01:00:21

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

07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件

如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 一.布局类控件 Grid.StackPanel.Canvas. VariableSizedWrapGrid 1.布局控件 - Grid 网格控件,网格布局: 相当于 HTML 中的 Table 标签: 但是注意 Table 更重要的是展示数据,而 Grid 则是专门为布局所生: 属性标记: Grid.RowDefinitions:行定义,元素类型 RowDefinition,必要属性 Height Grid.ColumnDefi

[控件] 画饼状图的控件

画饼状图的控件 效果 注意:支持遮罩效果 源码 https://github.com/YouXianMing/CircleView // // CircleView.h // YXMWeather // // Created by XianMingYou on 15/5/12. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import <UIKit/UIKit.h> @interface CircleView : U

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

[源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性 作者:webabcd介绍重新想象 Windows 8.1 Store Apps 之控件增强 文本类控件的增强 为一些控件增加了 Header 属性和 HeaderTemplate 属性 为一些控件增加了 PlaceholderText 属性 示例1.演示

基于Qt的第三方库和控件

====================== 基于Qt的第三方库和控件 ======================     libQxt --------   http://dev.libqxt.org/libqxt/wiki/Home   按照文档中所流露的意思,libQxt实现了一些“Qt本来就应该有但实际上没有”的功能. 对应Qt相应的Module,Qxt有 QxtCore.QxtGui.QxtNetwork.QxtSql等模块作为Qt功能的 补充,此外,还提供了QxtWeb(Web S

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

C#控件系列--文本类控件 文本类控件主要包括Label.LinkLabel.Button.TextBox以及RichTextBox. Label 功能 Label用来显示用户不能直接改变的文本信息. 属性 Image--指定标签上显示的图像. Text--此属性是与文件相关联的文本. Name--标识对象的名称. AutoSize--如果此属性为true,则启用了根据字号自动调整大小.请注意,这只对文本不换行的标签控件有效. Enabled--是否启用该控件. Visible--可见还是隐藏.

C#控件系列--选择类控件

C#控件系列--选择类控件 选择类控件主要包括:ComboBox.CheckBox.CheckedListBox.RadioButton.NumericUpDown以及ListBox. ComboBox 功能 ComboBox控件用于在下拉组合框中显示数据,它结合了TextBox控件和ListBox控件的功能. 属性

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

该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义功能的实现改为在eclipse等ide中开发. 设计本插件的原因是直接在kettle中写java代码是很不容易的事,开发体验与eclipse差得远,java语法还要受到限制,调试麻烦.实现点简单的逻辑还行,稍微复杂一点就比较麻烦,需要对java和kettle相关接口很熟悉.而简单的功能可以采用jav

Winform控件之文本类控件

对于一个应用程序而言,控件是搭建用户界面的积木.它们具备交互式的特征.VS 2012中的控件都放在工具箱中,添加一个控件到窗体,只需在工具箱中选择好要添加的控件,并按住鼠标左键,拖动到窗体上即可.向窗体上添加控件还有另一个方法,就是通过代码来实现,即可通过窗体的Controls类的Add方法,格式为:窗体标识.Controls.Add(控件标识).通过代码的方法添加控件比较麻烦,基本上是不会使用这种方法的. 文本类控件包含标签控件(Label),按钮控件(Button),文本框控件(TextBo

Qt编程之UI与控件布局

当然,大家都知道UI界面可以用Qt Designer在约束环境下设置编辑.ui文件,再将.ui文件转换成对应的ui_XXX.h文件,这头文件中的内容是:用C++语言实现真正的界面布局.uic -o "outputfile" "inputfile.ui"命令行可以转换 当然,也可以自己用C++来实现界面布局利用成员函数SetGeometry什么的,但是那样的开发效率就下降了,BUG概率引入的也会加大. 这篇文章很好的演示了只利用C++实现的界面设计布局: http:/