【问题标题】:QGraphicsItem::paint(): how to check if QGraphicsScene is printedQGraphicsItem::paint(): 如何检查 QGraphicsScene 是否被打印
【发布时间】:2017-12-06 08:08:26
【问题描述】:

我有一个从 QGraphicsItem 子类化的类 RadBox。我希望项目具有不同的背景和前景色,具体取决于其场景是显示、打印还是复制到剪贴板。这是该项目的paint() 方法:

void RadBox::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
           QWidget *widget)
{
    if(isSelected()) painter->setPen(grayPen);
    else painter->setPen(blackPen);
    if(standing!=0) painter->setBrush(redBrush);
    else painter->setBrush(grayBrush);
    painter->drawRoundedRect(-35, -30, 70, 60, 3, 3);
    painter->setFont(fnt);
    painter->drawText(QRectF(-35,-10,70,20),Qt::AlignCenter,QString::number(box_number));
    painter->setFont(fnt2);
    painter->drawText(QRectF(-35,5,70,20),Qt::AlignCenter,QString::number(power));
}

复制到剪贴板:

void Scheme::on_copyButton_clicked()
{
    QPixmap pm(scene.itemsBoundingRect().width()*3,scene.itemsBoundingRect().height()*3);
    QPainter pnt;
    pnt.begin(&pm);
    scene.render(&pnt);
    pnt.end();
    QApplication::clipboard()->setPixmap(pm,QClipboard::Clipboard);
}

印刷:

void Scheme::print_preview(QPrinter* printer)
{
    QPainter pnt;
    pnt.begin(printer);
    scene.render(&pnt);
    pnt.end();
}

如何让项目知道场景是否被绘制、打印或复制?

【问题讨论】:

    标签: c++ qt graphics


    【解决方案1】:

    回答我自己:painter->device() 有一个成员 devType()

    switch(painter->device()->devType())
    {
    case QInternal::Widget:
        if(isSelected()) painter->setPen(grayPen);
        else painter->setPen(blackPen);
        if(standing!=0) painter->setBrush(redBrush);
        else painter->setBrush(grayBrush);
        break;
    case QInternal::Pixmap:
    case QInternal::Printer:
        painter->setPen(blackPen);
        painter->setBrush(QBrush(Qt::white));
        break;
    default:
        break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2013-08-26
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2011-03-29
      相关资源
      最近更新 更多