Qt: QDockWidget中QLabel的大小

Qt: size of QLabel in a QDockWidget

本文关键字:QLabel QDockWidget Qt      更新时间:2023-10-16

我创建了一个左QDockWidget,并添加了2个QLabel。我想要一个平方大小的标签(默认为100x100)。

所以当用户增加QDockWidget的宽度时,我应该如何强制我的标签保持平方大小?

我尝试了很多事情,没有任何成功:

我认为你应该覆盖int QWidget:: highightforwidth (int width) const函数。因此,您需要创建自己的QLabel子类。

class MyLabel
{
public:
    virtual int heightForWidth( int aWidth ) const override
    {
        return aWidth; // So it will be square.
    }
};

我想我有办法了

我创建了这个子类:

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);

现在,我需要调整我的像素图在我的标签。我会在结束这个问题之前把它贴出来。