2

画像の縦横比を保持するスケーラブルな画像ウィジェットを qt クリエーターで実装しようとしています。私が見つけたすべての例または投稿は、QLabel を拡張して resizeEvent を再実装することを提案しています。これは私が行ったことであり、ほとんど機能しますが、いくつかの問題があります。

  1. メイン ウィンドウを最初に開くと、画像がわずかに大きくなり、メイン ウィンドウのサイズが大きくなります (これはそれほど大きな問題ではありません)。

  2. ウィンドウを最大化するとすべての画像が拡大されますが、ウィンドウの最大化を解除すると画像が縮小されません。

QLabel サブクラス (ClickableImage と呼ばれる) と、ClickableImage を含むレイアウトを保持する親ウィジェットの両方の resizeEvents を変更しようとしました。関連するコードの一部を次に示します。

void ClickableImage::resizeEvent(QResizeEvent *e)
{
    qDebug() << "Resizing : " << ticker;
    ticker++;

    int w = e->size().width();
    int h = e->size().height();

    qDebug() << "W : " << w;
    qDebug() << "H : " << h;

    image = QPixmap(fname);
    image = image.scaled(w-7, h-7, Qt::KeepAspectRatio);
    setPixmap(image);
}

また、次のソースを読みました。

Qt:縦横比を維持しながら QPixmap を含む QLabel のサイズを変更する

https://docs.huihoo.com/qt/4.2/desktop-screenshot.html

ありがとう。

4

1 に答える 1

0

試していただきたいことが 4 つあります。より大きなコード例を提示していただければ、私も試してみたいと思います。

  1. おそらくadjustSize()、サイズ変更イベントの最後に呼び出す必要があります。おそらく電話は必要ありませんが、update()電話を入れてみて、違いがあるかどうかを確認してください。

  2. 最小化イベントは と同じである必要があるためhideEvent()、最小化時に画像サイズを変更する場合は、画像スケーリングの一部もそこに入れます。

  3. Window および Dialog ウィジェットのドキュメントは、サイズ変更の一部に役立つ場合がありますが、サイズ変更時にウィジェット内の何かのサイズを設定するという再帰的な性質の一部である場合もあります。

  4. これに代わる方法は、ウィジェットにサイズ変更を判断させることです。QLabel には、使用できるサイズに基づいてコンテンツをスケーリングするオプションがあります。そのため、QLabel を作成し、そのピックスマップを設定し、コンテンツのスケール プロパティを設定すると、自動的に高速スケーリングが実行されます。サイズを変更します。最小化するには、おそらくまだ縮小する必要があります。

それが役立つことを願っています。問題が解決しない場合はお知らせください。

于 2012-06-26T07:59:31.177 に答える