2015-07-10 36 views
0

我创建了左边的QDockWidget,并在其中添加了2 QLabel。 我想要标签的平方尺寸(默认为100x100)。Qt:QDockWidget中QLabel的大小

因此,当用户增加QDockWidget的宽度时,我应该如何强制我的标签保持平方尺寸?

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

回答

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. 
    } 
}; 
+0

这是不够的。 – hao

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

现在,我需要调整我的像素图在我的标签。 我会在关闭此问题之前发布它。

+0

http://stackoverflow.com/a/22618496/999943 – phyatt