Qt 卡片控件 一个以卡片样式展示信息的自定义控件

Qt 卡片控件 一个以卡片样式展示信息的自定义控件

效果图:
在这里插入图片描述

代码:

MyCardWidget:

#pragma once

#include <QWidget>
#include "ui_MyCardWidget.h"
#include "MyHeaders.h"
class MyCardWidget : public QWidget
{
	Q_OBJECT

public:
	MyCardWidget(QWidget *parent = Q_NULLPTR);
	~MyCardWidget();
	void setHeards(const QStringList& strs);
	void setBottoms(const QStringList& strs);
	void setPixmap(const QPixmap& pix);

protected:
	virtual void paintEvent(QPaintEvent* event);
private:
	Ui::MyCardWidget ui;
	QStringList m_headList;
	QStringList m_bottomList;
	QPixmap m_nikPix;

};

MyCardWidget.cpp:

#include "MyCardWidget.h"
#include <MyHeaders.h>
#if _MSC_VER>=1600
#pragma execution_character_set("utf-8")
#endif
MyCardWidget::MyCardWidget(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	//隐藏标题栏
	setWindowFlags(Qt::SubWindow | Qt::FramelessWindowHint);
	setMouseTracking(true);
	//resize(100, 100);
}

MyCardWidget::~MyCardWidget()
{
}

void MyCardWidget::setHeards(const QStringList& strs)
{
	m_headList = strs;
}

void MyCardWidget::setBottoms(const QStringList& strs)
{
	m_bottomList = strs;
}

void MyCardWidget::setPixmap(const QPixmap& pix)
{
	m_nikPix = pix;
}

void MyCardWidget::paintEvent(QPaintEvent* event)
{
	QPainter painter(this);
	int width = this->width();
	painter.save();
	{
		
		int color = qrand() % 20;
		QBrush brush(QGradient(static_cast<QGradient::Preset>(color)));
		painter.setBrush(brush); 
	}
	QRect headTextRect = QRect(QPoint(0, 0), QPoint(width, 190));
	//订单信息栏
	painter.drawRect(headTextRect);

	QRect headTextRR(QPoint(10, 10), QPoint(width-10, 190-10));
	painter.restore();
	painter.save();
	QPen headPen;
	//headPen.setColor(Qt::white);
	//headPen.setWidthF(15.0);
	painter.setFont(QFont("宋体", 20, 1));
	painter.drawText(headTextRR, Qt::AlignCenter, m_headList.join("\n"));
	painter.restore();
	QRect nikPix(QPoint(0,190), QPoint(60,height()));
	painter.drawPixmap(nikPix, m_nikPix);
	//头像栏
	//painter.drawRect(QRect(QPoint(60, 190), QPoint(width, height())));
	{
		int color = qrand() % 20;
		QBrush brush(QGradient(static_cast<QGradient::Preset>(color)));
		painter.setBrush(brush);
	}
	//最后信息栏
	painter.drawRect(QRect(QPoint(60, 190), QPoint(width, height())));
	painter.restore();
	painter.setFont(QFont("宋体", 15, 1));
	QRect bottomRect(QRect(QPoint(70, 200), QPoint(width - 10, height() - 10)));
	painter.drawText(bottomRect, Qt::AlignCenter, m_bottomList.join("\t"));
}

使用样例:

	MyCardWidget myCard;
	QStringList heardes = QStringList() << "a" << "b" << "c" << "d" << "e";
	QStringList bottoms = QStringList() << "a" << "b" << "c";
	myCard.setHeards(heardes);
	myCard.setBottoms(bottoms);
	QPixmap pix(":/shop/image/shop/地址.png");
	myCard.setPixmap(pix);
	myCard.show();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值