QT开发中文网

no member named setStyleSheet in QAction

对不起,我之前的回答有误。实际上,QAction类本身没有提供直接设置样式表的方法。要为QAction实现按下后变灰色并向上突出一点的效果,您可以使用QProxyStyle来自定义一个样式,并将其应用于相关的部件(如QToolBar或QMenu)。

以下是一个示例代码,展示了如何通过自定义样式和代理风格来实现这个效果:

// 创建一个自定义的代理风格类
class CustomProxyStyle : public QProxyStyle {
public:
    void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget = nullptr) const override {
        if (element == CE_ActionButton && qobject_cast<const QAction*>(widget)) {
            if (option->state & State_Sunken) { // 按下状态
                QRect rect = option->rect;
                rect.adjust(0, -2, 0, 0); // 向上偏移2像素

                painter->save();
                painter->setRenderHint(QPainter::Antialiasing);

                // 绘制背景矩形
                QColor bgColor(Qt::gray);
                painter->fillRect(rect, bgColor);

                // 绘制文本内容
                QPen textPen(Qt::white);
                painter->setPen(textPen);
                painter->drawText(rect, Qt::AlignCenter, option->text);

                painter->restore();

                return;
            }
        }

        QProxyStyle::drawControl(element, option, painter, widget);
    }
};

// 在适当的地方创建并应用自定义代理风格
QToolBar* toolbar = new QToolBar(this);
CustomProxyStyle* customStyle = new CustomProxyStyle();
toolbar->setStyle(customStyle);

在上述示例中,我们创建了一个名为CustomProxyStyle的自定义代理风格类,并重写了drawControl()函数以实现按下效果。然后,我们将这个自定义风格应用于目标部件(例如QToolBar)。

请注意,在绘制函数中,我只对属于QAction的CE_ActionButton元素进行了处理。如果您还想要适用于其他类型的部件或控件,请相应地调整代码。

希望这能帮到您!如有其他问题,请随时提问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=9122

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?