2017-12-17 74 views
0

이 그림과 같이 삼각형 모양과 마름모 모양을 그려야합니다. 삼각형 모양을 디자인하는이 코드에서 (그림 1)이 글자를 "TRI"에 추가해야합니다. . 또한 마름모 모양을 디자인하려면이 코드를 구현해야합니다 (그림 2). 이 문제를 해결하도록 도와주세요.QT를 사용하여 삼각형과 마름모 모양을 그리는 방법

그림 1

void MainWindow::on_btnTri_clicked() 
{ 
    QPen redPen(Qt::black); 
    redPen.setWidth(2); 
    QRectF rect = QRectF(0, 0, 200, 200); 

    QPainterPath path; 
    path.moveTo(rect.left() + (rect.width()/2), rect.top()); 
    path.lineTo(rect.bottomLeft()); 
    path.lineTo(rect.bottomRight()); 
    path.lineTo(rect.left() + (rect.width()/2), rect.top()); 
    QGraphicsPathItem* item = ui->graphicsView->scene()->addPath(path, redPen); 
    item->setFlag(QGraphicsItem::ItemIsMovable, true); 
    item->setFlag(QGraphicsItem::ItemIsSelectable,true); 
} 

enter image description here

그림 2 나는 그림 2 그러나이 크기를 변경하는 매개 변수를 전달할 수 없습니다, 내 그림 1 설계 코드 I를 설계하는이 코드를 사용 두 개의 매개 변수를 QRectF(0, 0, para1, para2);에 전달할 수 있습니다.이 코드는 변경 삼각형의 크기와 같습니다. 따라서 동일한 코드를 변경하여 QPainterPath 또는 다른 방법으로 사용해야합니다. 그것은 QFontMetrics을 사용하기위한

void MainWindow::on_btnRomb_clicked() 
{ 
    QPolygonF romb; 
    romb.append(QPointF(20,40)); 
    romb.append(QPointF(0,20)); 
    romb.append(QPointF(20,0)); 
    romb.append(QPointF(40, 20)); 
    QGraphicsPolygonItem* itemR = ui->graphicsView->scene()->addPolygon(romb); 
    itemR->setFlag(QGraphicsItem::ItemIsMovable); 
} 

답변

1

당신은 텍스트의 폭과 높이를 계산해야합니다 중앙에 배치하는, QPainterPathaddText() 방법을 사용해야합니다

QPen redPen(Qt::black); 
redPen.setWidth(2); 
QRectF rect(0, 0, 200, 200); 

QPainterPath path; 
path.moveTo(rect.left() + (rect.width()/2), rect.top()); 
path.lineTo(rect.bottomLeft()); 
path.lineTo(rect.bottomRight()); 
path.lineTo(rect.left() + (rect.width()/2), rect.top()); 
path.moveTo(rect.center()); 

QFont font("Times", 20, QFont::Bold); 

QFontMetrics fm(font); 
QString text = "TRI"; 
QSize size = fm.size(Qt::TextSingleLine, text); 
path.addText(rect.center()+ QPointF(-size.width()*0.5, size.height()*0.5), font, text); 

QGraphicsPathItem *item = ui->graphicsView->scene()->addPath(path, redPen); 
item->setFlag(QGraphicsItem::ItemIsMovable, true); 
item->setFlag(QGraphicsItem::ItemIsSelectable,true); 

의 경우를 들어 다이아몬드는 각 정점의 중간 점 얻어야한다 :

QPainterPath path; 
QRectF rect(0, 0 , 100, 100); 
path.moveTo(rect.center().x(), rect.top()); 
path.lineTo(rect.right(), rect.center().y()); 
path.lineTo(rect.center().x(), rect.bottom()); 
path.lineTo(rect.left(), rect.center().y()); 
path.lineTo(rect.center().x(), rect.top()); 
QGraphicsPathItem* itemR = ui->graphicsView->scene()->addPath(path); 
itemR->setFlag(QGraphicsItem::ItemIsMovable); 
+0

감사 Mr.qt을, – Learner

+0

선생님이 말씀 해주십시오 수) 어떻게 짱 그림 2와 같은이 마름모 모양, 이제 그것은 등각 마름모로 생성됩니다. 어떻게 그림 2 모양으로 바꿀 수 있습니까? – Learner

+1

'QRectF rect (0, 0, 100, 100);을'QRectF rect (0, 0, 100, 50);으로 바꾼다 – eyllanesc