QT模拟QToolButton 并将直角图片用代码写成圆角

需求

一个按钮有图标和文字,采用 QToolButton 图片文字上下结构,搞定!
由于上述的按钮是固定存在的,美工给做的是圆角图。

然后使用场景还有动态增加的按钮,而图片也是用户动态增加的,然后并不一定是圆角图。
为了统一,必须把动态添加的按钮中的 Icon 也搞成圆角矩形。
然而一经查阅并没有现成的方法,于是用个子控件实现,一个QWidget 中放2个QLabel,一个放图标做成圆角,一个放文字。

代码实现

    //1.设置图标
    QPixmap pixmOld = QPixmap(QString(":/tool/tool_default"));//要显示的图片
    QPixmap pixmap(44,44);//准备装图片的矩形框
    pixmap.fill(Qt::transparent);
    QPainter painter(&pixmap);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
    QPainterPath path;
    path.addRoundedRect(0,0,44, 44,4,4);//绘制圆角矩形,x轴y轴半径都为4
    painter.setClipPath(path);
    painter.drawPixmap(0, 0, 44, 44, pixmOld);//将显示图片的pixmap画入矩形框内
    ui.labelIcon->setPixmap(pixmap);
    ui.labelIcon->setScaledContents(true);

    //2.设置文字
    ui.labelText->setText(sData.strName);

效果

第一行两个是QToolButton 实现,icon图片素材是圆角
第二行两个是子控件方式实现,图片素材是直角
这里写图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤实现将QDockWidget中的QtoolButton复制拖拽到QtDrawingpaperEditor中: 1. 在QDockWidget中创建QtoolButton,并将其设置为可拖拽: ```cpp QToolButton *toolButton = new QToolButton(this); toolButton->setText("My Button"); toolButton->setAutoRaise(true); toolButton->setCursor(Qt::OpenHandCursor); toolButton->setDragEnabled(true); ``` 2. 在QtDrawingpaperEditor中实现拖拽事件的处理函数: ```cpp void QtDrawingpaperEditor::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { event->acceptProposedAction(); } } void QtDrawingpaperEditor::dropEvent(QDropEvent *event) { if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { QByteArray data = event->mimeData()->data("application/x-qabstractitemmodeldatalist"); QDataStream stream(&data, QIODevice::ReadOnly); while (!stream.atEnd()) { int row, col; QMap<int, QVariant> roleDataMap; stream >> row >> col >> roleDataMap; QString text = roleDataMap[Qt::DisplayRole].toString(); // 在QtDrawingpaperEditor中创建新的QtoolButton,并设置其文本内容 QToolButton *newButton = new QToolButton(this); newButton->setText(text); newButton->show(); } event->acceptProposedAction(); } } ``` 3. 将QtoolButton拖拽到QtDrawingpaperEditor中: 在QDockWidget中按住QtoolButton左键不放,拖动鼠标到QtDrawingpaperEditor中,释放左键即可。此时QtDrawingpaperEditor中会创建一个新的QtoolButton并显示其文本内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值