QT自定义一个圆形图片控件

本文介绍了如何使用Qt库创建一个名为CircularpictureWidget的自定义QWidget子类,用于在圆形区域内显示头像,并利用 QPainterPath和Antialiasing进行平滑绘制。
摘要由CSDN通过智能技术生成
#include <QtWidgets/QWidget>
#include <QPainter>

class CircularpictureWidget : public QWidget
{
	Q_OBJECT
public:
	CircularpictureWidget(uint _radius ,QWidget* parent = NULL)
		: QWidget(parent)
		,m_radius(_radius)
	{
		this->setFixedSize(QSize(m_radius, m_radius));
		this->setAttribute(Qt::WA_TranslucentBackground);
		QRect headRect = QRect(0, 0, m_radius, m_radius);
		m_headPath.addEllipse(headRect);
	}

	void paintEvent(QPaintEvent* event)
	{
		QPainter painter(this);
		painter.setRenderHints(QPainter::Antialiasing);
		// 绘制圆形头像;
		painter.setClipPath(m_headPath);
		painter.drawPixmap(m_headPath.controlPointRect().toRect(), QPixmap(":/testQQlogin/QQHead.jpg"));
		painter.strokePath(m_headPath, QPen(Qt::white, 5));
		return QWidget::paintEvent(event);
	}
private:
	QPainterPath m_headPath;
	uint m_radius= 0;
};

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt 中,可以通过继承 QWidget 类来创建自定义控件。下面是一个简单的示例代码: ```cpp #include <QWidget> class MyWidget : public QWidget { Q_OBJECT public: MyWidget(QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *event) override; }; MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { // 设置控件的大小 setFixedSize(100, 100); } void MyWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); // 在控件上绘制一个矩形 QPainter painter(this); painter.drawRect(0, 0, width() - 1, height() - 1); } ``` 在上面的代码中,我们创建了一个名为 MyWidget 的自定义控件,并重写了 paintEvent() 函数来在控件上绘制一个矩形。在构造函数中,我们调用了 QWidget 的 setFixedSize() 函数来设置控件的固定大小。 如果需要添加更多的功能,可以在 MyWidget 类中添加需要的函数和成员变量。在使用自定义控件时,只需要像使用其他控件一样将其添加到需要的窗口或布局中即可。 需要注意的是,为了让自定义控件能够正常使用 Qt 的信号和槽机制,需要在类的开头加上 Q_OBJECT 宏,并在类的实现文件中添加相应的元对象信息。例如: ```cpp #include "mywidget.h" #include <QPainter> MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setFixedSize(100, 100); } void MyWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); painter.drawRect(0, 0, width() - 1, height() - 1); } #include "moc_mywidget.cpp" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值