c++ - Qt - 有没有办法将图形项目转换为像素图?
问题描述
我想从图形对象创建像素图,所以我可以将像素图设置为图标
我有一个Block
派生自的类QGraphicsPathItem
,我尝试使用:
Block *block = new Block();
QRect rect = block->boundingRect().toRect();
QPixmap pixmapItem;
pixmapItem.copy(rect);
QListWidgetItem *item = new QListWidgetItem;
item->setIcon(QPixmap(pixmapItem));
但像素图似乎是空的。
有没有办法从图形对象或图形项目中获取图像/图标?
解决方案
您必须使用 的paint()
方法QGraphicsItem
来获取渲染:
static QPixmap QPixmapFromItem(QGraphicsItem *item){
QPixmap pixmap(item->boundingRect().size().toSize());
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing);
QStyleOptionGraphicsItem opt;
item->paint(&painter, &opt);
return pixmap;
}
例子:
#include <QApplication>
#include <QGraphicsPathItem>
#include <QGraphicsView>
#include <QHBoxLayout>
#include <QListWidget>
static QPixmap QPixmapFromItem(QGraphicsItem *item){
QPixmap pixmap(item->boundingRect().size().toSize());
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing);
QStyleOptionGraphicsItem opt;
item->paint(&painter, &opt);
return pixmap;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
QHBoxLayout lay(&w);
QListWidget listWidget;
QGraphicsView view;
QGraphicsScene scene;
view.setScene(&scene);
int counter = 0;
for(const QColor & color : {QColor("red"), QColor("blue"), QColor("green")}){
QPainterPath p;
p.addRoundedRect(0, 0, 150, 50, 2, 2);
QGraphicsPathItem *block = scene.addPath(p);
block->setBrush(QBrush(color));
block->setFlag(QGraphicsItem::ItemIsMovable);
block->setFlag(QGraphicsItem::ItemIsSelectable);
block->setPos(counter*QPointF(10, 10));
// get QPixmap from item
QPixmap pixmap = QPixmapFromItem(block);
QListWidgetItem *l_item = new QListWidgetItem(color.name());
listWidget.addItem(l_item);
l_item->setIcon(QIcon(pixmap));
counter++;
}
lay.addWidget(&listWidget);
lay.addWidget(&view);
w.show();
return a.exec();
}
推荐阅读
- java - android 中的 Listview 项目应显示 ble 设备的名称,但应隐藏设备的 MAC 地址
- excel - 如何从 Excel 中的行动态创建下拉列表
- reactjs - 使用递归渲染的 Material UI 嵌套列表不适用于反应钩子
- r - 在 r 中运行 logit 回归
- azure - 获取将数据发送到特定日志分析工作区的所有资源?
- javascript - 在 asyncStorage 中存储数组状态对象
- ios - NSCollectionLayoutSupplementaryItem 显示在单元格下方
- hbase - Geomesa IN 查询性能
- javascript - Vue md-input 与 Vuex 仅在一个方向更新
- laravel - API根据用户类型给出结果