2014-10-12 44 views
0
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); 

我要更新“this”的大小吗? 父窗口小部件? “这个”小部件? 还是两者兼而有之?我怎样才能以40x40的尺寸导致重绘事件?Qt:resize(int,int)无法正常工作

只是尝试这样做,但小窗口“精灵/图像”不改变它的大小:

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

Setfixedsize设置最小和最大尺寸。如果你使用布局检查:http://stackoverflow.com/questions/11000083/cant-resize-widgets-in-qvboxlayout也尝试使用resizeEvent,而不是paintEvent。 – Chernobyl 2014-10-12 11:15:27

回答

0

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

大小:QSize 该属性保存小部件的大小,不包括任何窗口框架。 如果小部件在调整大小时可见,它会立即收到大小调整事件(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)+')' 
         +"}"); 
} 

按钮将有新的随机颜色每一个大小调整。

0

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

您需要决定是手动调整控件大小,还是根据布局调整大小。两者不能同时并存。如果小部件由布局管理,则明确的resize呼叫是无操作的。如果小部件不是由布局管理的,则setXxxxSize调用是空操作,因为它们仅设置布局系统使用的属性。

相关问题