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();
答案 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
调用就是无操作,因为它们只设置布局系统使用的属性。