0

left を作成しQDockWidget、それに 2 を追加QLabelしました。ラベルのサイズを正方形にしたい (デフォルトでは 100x100)。

では、ユーザーが の幅を広げた場合QDockWidget、ラベルを正方形のサイズに保つにはどうすればよいでしょうか?

私は多くのことを試しましたが、成功しませんでした:(

4

2 に答える 2

0

私は解決策を持っていると思います。

このサブクラスを作成します:

class SquareLabel : public QLabel
{
public:
    SquareLabel(QWidget* parent = 0) : QLabel(parent)
    {
        setMinimumSize(100, 100);

        QSizePolicy pol(QSizePolicy::Preferred, QSizePolicy::Preferred);
        pol.setHeightForWidth(true);
        setSizePolicy(pol);
    }
    virtual int heightForWidth(int w) const { return w; }
    virtual QSize sizeHint() const { int w = this->width(); return QSize(w, heightForWidth(w)); }

protected:
    void resizeEvent(QResizeEvent* event) { }
};

私のラベルはすべて QVBoxLayout に追加され、このプロパティが必要です:

layout->setAlignment(Qt::AlignTop);

ここで、ラベルのピックスマップのサイズを変更する必要があります。この質問を閉じる前に投稿します。

于 2015-07-10T15:12:46.063 に答える
0

int QWidget::heightForWidth( int aWidth ) const関数を上書きする必要があると思います。QLabelしたがって、独自のサブクラスを作成する必要があります。

class MyLabel
{
public:
    virtual int heightForWidth( int aWidth ) const override
    {
        return aWidth; // So it will be square.
    }
};
于 2015-07-10T14:34:39.913 に答える