2014-10-12 45 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調用是空操作,因爲它們僅設置佈局系統使用的屬性。

相關問題