繁体   English   中英

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

[英]Qt: resize(int,int) doesn't work properly

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大小引发重绘事件?

刚刚尝试过,但是小部件“ sprite / image”不会更改其大小:

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

您调整qconnectorblob小部件(而不是父级)的大小。 从文档:

size: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)+')'
                       +"}");
}

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

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

您需要确定是手动调整窗口小部件的大小,还是由布局调整大小。 两者不能同时存在。 如果窗口小部件是由布局管理的,则显式resize调用是无操作的。 如果窗口小部件不受布局管理,则setXxxxSize调用是无操作的,因为它们仅设置布局系统使用的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM