图标切换两种状态

fcg

//深色
likeIcon.setSelected(true);
//浅色
likeIcon.setSelected(false);


要在`QTableView`中自定义代理按钮并支持两种不同状态,你需要在Qt中结合使用`QStyledItemDelegate`和`QPushButton`。这里是一个简单的步骤概述: 1. **创建自定义代理**: - 创建一个继承自`QStyledItemDelegate`的新类,例如`CustomButtonDelegate`。 ```cpp class CustomButtonDelegate : public QStyledItemDelegate { public: CustomButtonDelegate(QObject* parent = nullptr) : QStyledItemDelegate(parent) {} // 添加绘制按钮的槽函数 void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) override { // ... 在这里画按钮,并设置位置 } // 其他必要的槽函数,如sizeHint() 和 createEditor() }; ``` 2. **设置代理**: - 在`QTableView`上设置你的自定义代理。 ```cpp QTableView* tableView = new QTableView(parent); tableView->setItemDelegate(new CustomButtonDelegate(tableView)); ``` 3. **处理按钮点击事件**: - 在`paint()`函数里,你可以画一个`QPushButton`,并在`mousePressEvent()`或类似事件中响应按钮点击。 ```cpp bool CustomButtonDelegate::hitTest(const QPoint& point, const QStyleOptionViewItem& option, const QModelIndex& index) override { // 检查鼠标是否落在了按钮区域内 // 如果是,则返回true以便处理按钮点击 if (buttonRect.contains(point)) { return true; } return QStyledItemDelegate::hitTest(point, option, index); } void CustomButtonDelegate::mousePressEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) { QPushButton* button = // 获取绘制的按钮实例 // 实现按钮的状态切换逻辑,比如槽函数switchState(button) } } void CustomButtonDelegate::switchState(QPushButton* button) { // 根据按钮当前状态改变样式或执行相应操作 button->setStyleSheet(...); // 改变按钮外观 // 或者执行其他业务逻辑 } ``` 4. **管理两种状态**: - 在`switchState()`中,你可以根据需要检查按钮的状态(例如,通过检查其文本、图标或属性),然后更新相应的样式,或者触发不同的操作。 记得在适当的位置添加信号槽连接,以便在按钮状态改变时执行相应的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值