注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

沙漠里de烟雨

原创分享,禁止转载

 
 
 

日志

 
 

Qt ---高效的圆角控件(附)  

2013-12-29 16:54:40|  分类: QT5.x与QML |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
#ifndef PAINTERWIDGET_H
#define PAINTERWIDGET_H

#include <QWidget>
#include <QSize>

class PriceBox : public QWidget
{
Q_OBJECT

public:
PriceBox(QWidget *parent=0);
PriceBox(const QString& text,QWidget *parent=0);
~PriceBox();
protected:
void paintEvent(QPaintEvent* event);
QSizePolicy sizePolicy() const;
QSize minimumSizeHint() const;

public:
QSize GetSize();
void  SetSize(int width,int height);
void  SetSize(const QSize& size);
void  SetRadius(int radius);
void  SetShowWidget(bool bShow);
bool  IsShowWidget();
QColor GetBackGroundColor();
void  SetBackGroundColor(const QColor& color);
void  SetText(const QString& text);
QString GetText();
void  SetShowFrame(bool bShow);
bool  IsShowFrame();
void  SetCornerText(const QString& text);
QString GetCornerText();
void  SetFontSize(int fontSize);
int   GetFontSize();


private:
void Init(QWidget* parent);

private:
int m_Radius; //圆角半径;
QSize m_Size;
QColor  m_Color;
bool    m_ShowWidget;
QString m_Text;
bool    m_ShowFrame;
QString m_CornerText;
};

#endif // PAINTERWIDGET_H

#include "PriceBox.h"

#include <QPainter>
#include <QBrush>
#include <QPushButton>

PriceBox::PriceBox(QWidget *parent)  : QWidget(parent)
{
this->Init(parent);
}


PriceBox::PriceBox(const QString& text,QWidget *parent) : QWidget(parent)
{
this->Init(parent);
m_Text = text;
}

PriceBox::~PriceBox()
{
  
}

void PriceBox::paintEvent(QPaintEvent* event)
{
if(m_ShowWidget)
{
QPainter painter(this);
if(m_ShowFrame)
painter.setPen(Qt::SolidLine);
else
painter.setPen(Qt::DotLine);

painter.setBrush(QBrush(m_Color));
int height = m_Size.height();
int width = m_Size.width();
float ratio = (float)height/width;
painter.drawRoundRect(0,0,width-1,height-1,(int)(ratio*m_Radius),m_Radius);

QFontMetrics fm(this->font());
int textHeight = fm.height();
if(!m_Text.isEmpty())
{
int textWidth = fm.width(m_Text);
painter.drawText((m_Size.width() - textWidth ) / 2,(m_Size.height() + textHeight ) / 2,m_Text); 
}
if(!m_CornerText.isEmpty())
{
painter.drawText(m_Size.width()-fm.width(m_CornerText),textHeight,m_CornerText);
}
}
QWidget::paintEvent(event);
}
QSizePolicy PriceBox::sizePolicy() const
{
QSizePolicy  sizePolicy;
sizePolicy.setHorizontalPolicy(QSizePolicy::Fixed);
sizePolicy.setVerticalPolicy(QSizePolicy::Fixed);
return sizePolicy;
}
QSize PriceBox::minimumSizeHint() const
{
return m_Size;
}


QSize PriceBox::GetSize()
{
return m_Size;
}
void PriceBox::SetSize(int width,int height)
{
m_Size.setWidth(width);
m_Size.setHeight(height);
this->resize(m_Size);
}
void PriceBox::SetSize(const QSize& size)
{
m_Size.setWidth(size.width());
m_Size.setHeight(size.height());
this->resize(size);
}
void PriceBox::SetRadius(int radius)
{
m_Radius = radius;
}
void PriceBox::SetShowWidget(bool bShow)
{
m_ShowWidget = bShow;
this->show();
}
bool PriceBox::IsShowWidget()
{
return m_ShowWidget;
}
QColor PriceBox::GetBackGroundColor()
{
return m_Color;
}
void PriceBox::SetBackGroundColor(const QColor& color)
{
m_Color = color;
}
void PriceBox::SetText(const QString& text)
{
m_Text = text;
}
QString PriceBox::GetText()
{
return m_Text;
}
void PriceBox::SetShowFrame(bool bShow)
{
m_ShowFrame = bShow;
}
bool PriceBox::IsShowFrame()
{
return m_ShowFrame;
}
void PriceBox::SetCornerText(const QString& text)
{
m_CornerText = text;
}
QString PriceBox::GetCornerText()
{
return m_CornerText;
}
void PriceBox::SetFontSize(int fontSize)
{
QFont font;
font.setPixelSize(fontSize);
this->setFont(font);
}
int PriceBox::GetFontSize()
{
return this->font().pixelSize();
}
void PriceBox::Init(QWidget* parent)
{
m_Size = QSize(50,25);
m_Radius = 25;
m_Color = Qt::gray;
m_ShowWidget = false;
m_Text = "";
m_ShowFrame = true;
m_CornerText = "";
}


  评论这张
 
阅读(302)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017