QGraphicsVIew绘制表格背景

项目场景:

在QGrapicsView中绘制表格状背景


实现

重写drawBackground方法,内容如下:

	//每50距离绘制一段直线
    QRect r = this->rect();

    QPointF tl = mapToScene(r.topLeft());
    QPointF br = mapToScene(r.bottomRight());

    double left = std::floor(tl.x() / 50);
    double top = std::floor(tl.y() / 50);

    double right = std::ceil(br.x() / 50);
    double bottom = std::ceil(br.y() / 50);

    //vertical lines from left to right
    for (int vi = (int)left; vi <= (int)right; vi++)
    {
        QLineF line(vi * 50, top * 50, vi * 50, bottom * 50);
        painter->drawLine(line);
    }

    //horizontal lines from top to bottom
    for (int hi = (int)top; hi <= (int)bottom; hi++)
    {
        QLineF line(left * 50, hi * 50, right * 50, hi * 50);
        painter->drawLine(line);
    }

错误提示:

如下代码打印方法参数

void GraphicsView::drawBackground(QPainter* painter, const QRectF& rect)
{
	 qDebug() << rect << this->rect();
}

在这里插入图片描述
drawBackground提供的rect长宽不正确,绘制的时候会发现不正常,使用this->rect()即可


Qt中,要在QTableWidget内的单元格插入一个QLabel作为圆形元素,你可以采用以下几种方法: 1. **自定义QTableWidgetItem**: - 创建一个自定义的QTableWidgetItem子类,继承自QTableWidgetItem,并设置其背景为圆形形状。你可以使用`setPixmap()`方法设置一个圆形的QPixmap或者使用`paintEvent()`方法自绘圆角矩形。 ```cpp class CustomTableWidgetItem : public QTableWidgetItem { public: CustomTableWidgetItem(const QString &text) : QTableWidgetItem(text) {} void paint(QPainter *painter, const QStyleOptionViewItem &option, QWidget *widget = nullptr) override { painter->save(); QRect rect = option.rect; int radius = rect.height() / 2; painter->drawRoundedRect(rect, radius, radius); painter->restore(); // 继续绘制原始文本或其他内容 } }; ``` 2. **使用QGraphicsItem**: - 可以创建一个QGraphicsEllipseItem并将其添加到QTableWidget的视图(如QTableView的viewport)。这需要在桌面上层处理图形渲染。 ```cpp QGraphicsScene scene; QGraphicsView view(&scene); QGraphicsEllipseItem ellipse(0, 0, 50, 50); // 半径自定义 scene.addItem(ellipse); QStyledItemDelegate* delegate = new MyCustomDelegate; // 自定义delegate处理单元格绘画 tableWidget.setItemDelegate(delegate); ``` 在这个例子中,你需要实现一个MyCustomDelegate子类,它会在绘制单元格时将QGraphicsView的内容展现出来。 3. **利用CSS样式** (仅适用于较新的Qt版本): - 如果使用QAbstractItemDelegate或自定义样式表,可以尝试通过CSS来控制单元格内的形状。虽然这不是直接在QLabel上操作,但在呈现层面可以达到类似效果。 以上每种方法都需要相应的布局管理以及事件处理,具体实现可能会根据项目需求有所调整。如果你有特定的布局或兼容性要求,记得检查相关的API文档和示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值