left を作成しQDockWidget
、それに 2 を追加QLabel
しました。ラベルのサイズを正方形にしたい (デフォルトでは 100x100)。
では、ユーザーが の幅を広げた場合QDockWidget
、ラベルを正方形のサイズに保つにはどうすればよいでしょうか?
私は多くのことを試しましたが、成功しませんでした:(
left を作成しQDockWidget
、それに 2 を追加QLabel
しました。ラベルのサイズを正方形にしたい (デフォルトでは 100x100)。
では、ユーザーが の幅を広げた場合QDockWidget
、ラベルを正方形のサイズに保つにはどうすればよいでしょうか?
私は多くのことを試しましたが、成功しませんでした:(
私は解決策を持っていると思います。
このサブクラスを作成します:
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);
ここで、ラベルのピックスマップのサイズを変更する必要があります。この質問を閉じる前に投稿します。
int QWidget::heightForWidth( int aWidth ) const関数を上書きする必要があると思います。QLabel
したがって、独自のサブクラスを作成する必要があります。
class MyLabel
{
public:
virtual int heightForWidth( int aWidth ) const override
{
return aWidth; // So it will be square.
}
};