ウィジェットの配置に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()に応答しません。
アドバイス・アドバイスをいただければ幸いです。