2012-06-19 1 views
8

하나의 수평 검은 선으로 구성된 위젯을 만들려고합니다. 이 위젯은 QGridLayout에 배치되어 전체 행을 차지하므로 구분 기호로 사용됩니다. 레이아웃이 설치되는 위젯의 크기가 조정되면, 라인이 계속 변경되도록 크기를 변경하고 싶습니다. QLine, QGraphicsView 및 QImage를 포함하여 여러 가지 옵션을 확인했지만 줄을 그릴 수는 없지만 크기를 조정할 필요는 없습니다.QWidget에 선 그리기

저는 이것을 자체 클래스로 구현하고 있으므로 필요할 때 다시 사용할 수 있습니다. 아무도 이것으로 나를 도울 수 있습니까? 이 경우

#include "startMenuSectionFooter.h" 

#include <QtGui> 

StartMenuSectionFooter::StartMenuSectionFooter(QWidget *parent) 
    : QWidget(parent) 
{ 
    layout = new QHBoxLayout(this); 
} 

void StartMenuSectionFooter::paintEvent(QPainEvent *e) 
{ 
    QPointF p1 = QPointF(parentWidget()->height(), 0); 
    QPointF p2 = QPointF(parentWidget()->height(), parentWidget()->width()); 

    QPainter painter(this); 
    painter.setRenderHint(QPainter::Antialiasing, true); 
    painter.setPen(QPen(Qt::black, 10)); 

    painter.drawLine(p1, p2); 
} 

, parent 앞서 언급 QGridLayout 설치된 따라 부모 QWidget이다.

#ifndef START_MENU_SECTION_FOOTER_H 
#define START_MENU_SECTION_FOOTER_H 

#include <QWidget> 

class QHBoxLayout; 
class QPainEvent; 

class StartMenuSectionFooter : public QWidget 
{ 
    Q_OBJECT 

    QBHoxLayout *layout; 

    void paintEvent(QPainEvent *e); 

public: 
    StartMenuSectionFooter(QWidget *parent = NULL); 
}; 

#endif 
+0

지금까지 보이는 화면을 보여줄 수 있습니까? AFAIK, 나는 위젯이 QGridLayout에서 여러 위치를 차지할 수 있다고 생각하지 않는다. 더 나은 접근법은 수평선을 만들어 각 열 (동일한 행)에 넣는 것이다. – eqzx

+2

프레임과 함께 QFrame을 사용해 보았는가? 모양을 HLine으로 설정 했습니까? –

+0

@RA, 정확히 내가 뭘 찾고 있었는지, 고마워. :) 답장으로 쓰면 나는 계속해서 받아 들일 것이다. –

답변

10

Qt는의 수평 라인을 만드는 가장 간단한 방법은 QFrame::HLine로 설정 frameShape 특성을 가진 QFrame을 사용하는 것입니다. 그런 다음이 프레임을 적절한 열 범위와 함께 격자 레이아웃에 배치 할 수 있습니다. 다음은 간단한, 인위적인 예입니다

QFrame* myFrame = new QFrame(); 
myFrame->setFrameShape(QFrame::HLine); 

const int NUMBER_OF_COLUMNS_IN_GRID = 4; 
myGridLayout->addWidget(myFrame, 0, 0, 1, NUMBER_OF_COLUMNS_IN_GRID); 

이것은 당신이 부모 레이아웃의 크기를 조정하면 크기를 자동으로 포함하기 위해 수행해야 할 모든 일을해야한다. 프레임의 팔레트로 재생하여 원하는 색상으로 표시 할 수도 있습니다.

1

QPain의 철자가 잘못되었습니다. 이벤트. 잘못 입력하면 paintEvent() 함수가 기본 클래스의 paintEvent()를 재정의하지 않습니다.

"QPainEvent"라는 변수 e를 사용하지 않으므로 구문 오류가 없습니다.