0

ウィジェットの配置にQGridLayoutを使用することを除いて、QtのImageViewerの例とよく似たQLabelを実装しました。QScrollBarを使用してQLabelをスケーリングするための同様の行も実装しましたが、QLabelはQScrollArea内でのスケーリングとは異なります。それが何らかのGridLayout管理の問題に関連しているかどうかはわかりません。私はどこでも読んでいて、3日間さまざまなことを試しています。以下に、コードの関連部分を示します。

私のViewerクラスコンストラクターでは:

{
imageLabel1 = new QLabel;
imageLabel1->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
imageLabel1->setScaledContents(true);

scrollArea1 = new QScrollArea;
scrollArea1->setWidget(imageLabel1);
scrollArea1->setWidgetResizable(true);

....
QGridLayout *centralLayout = new QGridLayout;
centralLayout->addWidget(scrollArea1, 0, 0);
...}

と私のscaleImageメソッド:

void Viewer::scaleImage1(int factor)
{
  Q_ASSERT(imageLabel1->pixmap());
  scaleFactor *= (1 + factor);
  //imageLabel1->resize(scaleFactor* imageLabel1->pixmap()->size());

  imageLabel1->pixmap()->toImage().scaled(scaleFactor* imageLabel1->pixmap()->size(), Qt::KeepAspectRatio, Qt::FastTransformation);
  imageLabel1->adjustSize();

  adjustScrollBar(scrollArea1->horizontalScrollBar(), factor);
  adjustScrollBar(scrollArea1->verticalScrollBar(), factor);

  imageLabel1->update();
  }

私のscaleImage1関数はパブリックスロットであり、0から2の間のスクロールバーから信号を受信するため、scaleFactorで、imageLabel1は元のサイズの最大3倍にズームインできるように設計されています。しかし、コードを実行すると、imageViewerデモで見たQScrollArea内でimageLabelが拡大されるのを観察しません。imageLabel1は、ロード時に元のサイズを保持するだけで、スクロールバーのvalueChange()に応答しません。

アドバイス・アドバイスをいただければ幸いです。

4

1 に答える 1

0

QSizePolicy::Minimum を imageLabel に設定したためだと思います。MinimumExpanding など、ニーズにより適したものを試してください。

于 2013-02-03T10:06:49.397 に答える