문제

나는 이것이 매우 구체적인 C ++ 및 QT 관련 질문이라는 것을 알고 있지만 어쨌든 누군가가 나를 도울 수있을 것입니다 ...

아래 코드를 참조하십시오 : 스크롤 영역 내에 이미지를 표시하고 싶습니다. 스크롤 영역의 뷰 포트는 정의 된 초기 크기를 가져야합니다. 즉, 이미지의 크기가 뷰 포트의 초기 크기보다 크면 스크롤 막대가 표시됩니다.

// create label for displaying an image
QImage image( ":/test.png" );
QLabel *label = new QLabel( this );
label->setPixmap( image.toPixmap() );

// put label into scroll area
QScollArea *area = new QScrollArea( this );
area->setWidget( label );

// set the initial size of the view port
// NOTE: This is what I'd like to do, but this method does not exist :(
area->setViewPortSize( QSize( 300, 300 ) );

보기 포트가 초기 크기보다 다른 크기를 얻도록 전체 응용 프로그램을 크기를 조정할 수 있습니다.

불행히도 나는보기 포트의 크기를 설정하는 방법을 알 수 없었습니다. QT의 레이아웃 메커니즘은보기 포트의 기본 크기를 설정하는 것처럼 보이지만 지금까지는 변경할 수 없었습니다. 새로운 크기를 설정합니다

area->setMinimumSize( QSize( 300, 300 ) );

실제로 요구 된 크기를 설정하지만 스크롤 영역은 300x300보다 작은 크기로 크기를 조정할 수있는 기능을 느슨하게됩니다.

어떤 아이디어?

도움이 되었습니까?

해결책

나는 당신이 문제를 잘못된 방식으로보고 있다고 생각합니다. Qscrollarea는 프레임이나 Qmainwindow에 넣은 위젯입니다. 위젯의 크기는 포함 된 위젯의 레이아웃에 의해 제어됩니다.

Trolltech 에서이 예를 살펴보십시오. 이미지 뷰어 예

다른 팁

스크롤 영역이 최상위 위젯입니까? 그렇다면 단순히 전화하십시오

area->resize(300,300);

계층 구조 내부에있는 경우 적절한 대상 (복잡한)을 조정하거나 해당 지역의 최소 크기를 설정해야합니다. SizeHint가 QSize (300,300)라고 가정하면 정의 된 내용에 따라 적절한 크기 정책을 줄 수 있다고 가정하면 LayoutPolicy를 실험하려고 시도 할 수도 있습니다. https://doc.qt.io/qt-5/qsizepolicy.html#policy-enum

당신은 시도 할 수 있습니다:

class MyScrollArea : public QScrollArea
{
    virtual QSize sizeHint() const { return QSize( 300, 300 ); }
};

// create label for displaying an image
QImage image( ":/test.png" );
Label *label = new QLabel;
label->setPixmap( image.toPixmap() );

// put label into scroll area
QScollArea *area = new MyScrollArea( this );
area->setWidget( label );

그러나 레이아웃과 QT는 놀랍게도 부두입니다. IMO는 가장 기능적인 부분입니다.

그렇지 않은 경우 다양한 위젯에서 qwidget :: resize ()를 호출하십시오.

내부 영역이 300x300이되도록 위젯을 크기로 크기를 크기로 쉽게 할 수 있다고 생각하지 않습니다. 스크롤 영역은 QWIDGET에서 물려받는 프레임 유형이므로 퍼지 할 수 있습니다. 이것은 당신이 그냥 전화 할 수 있음을 의미합니다 area->resize( 300 + fudge, 300 + fudge ), 퍼지 값이 프레임의 도면으로 인한 여분의 비트를 설명하는 곳.

그러나 이것이 동적으로 재생 가능한 대화 상자에서 작동 할 것이라고 확신하지 못합니다. 나는 이런 일을 한 적이 없다.

스크롤 영역 안에 이미지를 표시하려는 경우 라벨과 함께 진행되지 않습니다.

qgraphicsview/qgraphicsscene/qgraphicpixmapitem (스크롤 영역 및 레이블 대신)을 사용해야합니다. 이미지를 표시 할 때 성능이 훨씬 좋습니다. 스크롤 영역과 레이블은 스크롤 막대를 사용하여 움직일 때 이미지를 매우 열렬히 다시 드러냅니다.

예를 들어, "qgvimageview"라는 GUI에 qgraphicsView가있는 ".ui"파일이 있고 "image"라는 qimage가 있습니다.

QGraphicsScene *scene = new QGraphicsScene(qgvImageView);
QPixmap pixTmp(QPixmap::fromImage(image));
QGraphicsPixmapItem * ppixItem = scene->addPixmap( pixTmp );
ppixItem->setPos(0,0);

QT 문서를 확인하십시오. BTW : 이것은 QT 4.2에서 소개되었습니다

이것이 구체적으로 문제를 해결할 것인지 확실하지 않지만 QgraphicsView가 당신이하려는 일에 더 잘 반응 할 가능성이 있습니다.

사용하는 것은 어떻습니까

area->setGeometry(int x, int y, int w, int h);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top