2017-05-14 12 views
2

위젯을 부분적으로 Qt 레이아웃과 중첩 시키려고합니다. 나의 현재 레이아웃이 QVBoxLayout 포함하는 4 개의 QHBoxLayout 아이들과 함께 달성 다음이다 : 이런 식으로 뭔가를 달성하기 위해,Qt 레이아웃에서 위젯을 부분적으로 겹치게 만들기

My current layout, achieved with a QVBoxLayout containing four QHBoxLayout children

내가 같은 무늬의 카드를 재편성하기 위해 노력하고있어 (수평 있음을 유의 수직 중복) :

This is the kind of overlapping I'm trying to achieve 불행하게도

, 모든 Qt는 설명서와 내가 읽은 모든 스택 오버플로 게시물 유명 시도 oid 위젯은 찾기보다는 오버랩됩니다. 위젯간에 음수 간격을 설정하거나 최대 너비를 계산하도록 레이아웃을 설정하는 방법이있을 수 있습니다 (예 :이 경우 한 개의 수트 카드의 수에 따라)? 아니면 맞춤 레이아웃을 만들어야합니까? 레이아웃을 전혀 사용하지 않아야할까요? 그것이 도움이 있다면

, 나는 다음과 같다 코드로 레이아웃에 위젯을 추가 해요 :

hLayout[card.getSuit()-1]->addWidget(cardWidget, 0, align); 

답변

3

당신은 QLayout의 서브 클래스를 구현해야합니다. Layout Management

기본적으로 다음과 같은 정의해야합니다 : 당신에게 정확하게 문제를 주소 지정 QT 문서에 대한 자세한 예는있다

  • 레이아웃에 의해 처리 항목을 저장하는 데이터 구조. 각 항목은 QLayoutItem입니다.

  • addItem(), 레이아웃에 항목을 추가하는 방법

  • setGeometry(), 레이아웃 수행 방법.

  • sizeHint(), 레이아웃의 기본 크기.

  • itemAt(), 레이아웃을 반복하는 방법.

  • takeAt(), 레이아웃에서 항목을 제거하는 방법.

대부분의 경우 minimumSize()도 구현합니다. 나는 아래

은 사용자의 편의를 위해, 예제의 코드의 가장 중요한 부분을 복사 한 : 나는 것을 보지 않았다면 믿을 수 없다

class CardLayout : public QLayout 
{ 
public: 
    CardLayout(QWidget *parent, int dist): QLayout(parent, 0, dist) {} 
    CardLayout(QLayout *parent, int dist): QLayout(parent, dist) {} 
    CardLayout(int dist): QLayout(dist) {} 
    ~CardLayout(); 

    void addItem(QLayoutItem *item); 
    QSize sizeHint() const; 
    QSize minimumSize() const; 
    int count() const; 
    QLayoutItem *itemAt(int) const; 
    QLayoutItem *takeAt(int); 
    void setGeometry(const QRect &rect); 

private: 
    QList<QLayoutItem*> list; 
}; 


void CardLayout::setGeometry(const QRect &r) 
{ 
    QLayout::setGeometry(r); 

    if (list.size() == 0) 
     return; 

    int w = r.width() - (list.count() - 1) * spacing(); 
    int h = r.height() - (list.count() - 1) * spacing(); 
    int i = 0; 
    while (i < list.size()) { 
     QLayoutItem *o = list.at(i); 
     QRect geom(r.x() + i * spacing(), r.y() + i * spacing(), w, h); 
     o->setGeometry(geom); 
     ++i; 
    } 
} 
+0

. 링크 및 추가 된 세부 사항에 감사드립니다! – juef