1

わかりましたので、ブラウザで画像のサイズを変更し、ウィンドウの中央に配置しながらアスペクト比を維持するqtで画像を表示したいと思います。アスペクト比を使用してサイズ変更を正しく機能させることができますが、Qt::AlignCenter に合わせると、qwidget のサイズが変更されなくなります (固定サイズのままです)。したがって、基本的に、どちらのオプションも機能させることができますが、一緒にすることはできません。

私がやろうとしていることの良い例は、matlab の imshow() 関数です。これにより、縦横比を維持しながら画像のサイズが変更され、画像がウィンドウの中央に配置されます。私が持っているコードは次のようなものです:

void roilayout::resizeEvent(QResizeEvent *event)
{
    QSize p(roiview->refimage->size());
    p.scale(roiview->view->size(), Qt::KeepAspectRatio);
    roiview->view->resize(p);   
}

そしてコンストラクターで:

roiview = new roiwindow;
roiview->view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
roiview->view->setCursor(Qt::CrossCursor);
roiview->view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
roiview->view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

QHBoxLayout *layoutContainer = new QHBoxLayout;
layoutContainer->addWidget(roiview->view);
setLayout(layoutContainer);

グーグルで検索しましたが、何も見つかりませんでした。また、少し前に同様の質問をしましたが、回答から、私は質問を十分に明確にしなかったようです。ありがとう。

4

1 に答える 1

1

いくつかのこと: まず、コントロールの「ビュー」の種類を知っておくと役に立ちます。また、親の resizeEvent() コールバック内で子コントロールの「ビュー」(タイプに関係なく) のサイズを変更する必要はないと思います。

より良い解決策は、子ウィジェットに sizeHint ポリシーを設定して自動的に展開することです。

于 2012-06-09T00:55:20.583 に答える