Qt:resize(int,int)无法正常工作

时间:2014-10-12 10:37:57

标签: c++ qt user-interface resize

qconnectorblob::qconnectorblob(QWidget *parent, bool type,
                               QNodeWidget *myPWidget, long myID, long connectToID) :
    QRadioButton(parent)
{
    setAcceptDrops(true);
    this->setAutoExclusive(false);
    mNodeWidget = myPWidget;
    mtype = type;

    //Resize for Android
    this->resize(40,40);

我要更新的内容"这个"调整大小? 父小部件? "这"小部件? 或两者 ?如何以40x40的大小引发重绘事件?

试过这个但是小部件 - " sprite / image"不要改变它的大小:

//Resize for Android
this->setFixedSize(40,40);
this->setMinimumSize(40,40);
this->setMaximumSize(40,40);
this->resize(40,40);
this->repaint();

2 个答案:

答案 0 :(得分:0)

您调整qconnectorblob小部件的大小,而不是父级。来自doc:

  

尺寸:QSize   此属性保存窗口小部件的大小,不包括任何窗口框架。   如果窗口小部件在调整大小时可见,则会立即收到resize事件(resizeEvent())。如果窗口小部件当前不可见,则保证在显示之前接收事件。   如果大小超出minimumSize()和maximumSize()定义的范围,则调整大小。   默认情况下,此属性包含一个取决于用户平台和屏幕几何的值。   警告:在resizeEvent()中调用resize()或setGeometry()会导致无限递归。   注意:将大小设置为QSize(0,0)将导致窗口小部件不显示在屏幕上。这也适用于Windows。

因此,您可以重新实现resizeEvent并在此事件中执行某些操作。你也可以调用repaint(),它会调用paintEvent,但我认为resizeEvent更合适。

http://qt-project.org/doc/qt-4.8/qwidget.html#repaint

使用示例:

void MyButton::resizeEvent(QResizeEvent *event)
{
    this->setStyleSheet("QRadioButton {"
                        "color: rgb("+QString::number(qrand()%255)+","+QString::number(qrand()%255)+","+QString::number(qrand()%255)+");"
                        "background-color: rgb("+QString::number(qrand()%255)+","+QString::number(qrand()%255)+","+QString::number(qrand()%255)+')'
                       +"}");
}

每次调整大小时,按钮都会有新的随机颜色。

答案 1 :(得分:0)

明确使用repaint几乎总是一个错误。当然是在这种情况下。只是摆脱那条线。

您需要决定是否手动调整窗口小部件的大小,或者是否按布局调整大小。两者不能同时共存。如果窗口小部件由布局管理,则显式resize调用是无操作。如果窗口小部件不是由布局管理的,那么setXxxxSize调用就是无操作,因为它们只设置布局系统使用的属性。