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

Что я должен обновить, что «это» изменяет размер? Родительский виджет? «Этот» виджет? Или оба? как я могу вызвать событие перерисовывания с моим размером 40x40?Qt: resize (int, int) не работает должным образом

Только что попробовал это, но widget- "спрайт/изображение" Dont изменить его размер:

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

Setfixedsize set min и max размеры. Если вы используете макеты, проверьте это: http://stackoverflow.com/questions/11000083/cant-resize-widgets-in-qvboxlayout также попробуйте использовать resizeEvent, а не paintEvent. – Chernobyl

ответ

0

Вы изменить размер qconnectorblob виджет, а не родительский. От документа:

размер: QSize Это свойство содержит размер виджета, исключая любой оконный фрейм. Если виджет отображается при его изменении, он получает событие изменения размера (resizeEvent()) немедленно. Если виджет в настоящее время не виден, он, как ожидается, получит событие до его показа. Размер настраивается, если он находится за пределами диапазона, определяемого minimumSize() и maximumSize(). По умолчанию это свойство содержит значение, зависящее от платформы пользователя и геометрии экрана. Предупреждение. Вызов resize() или setGeometry() внутри resizeEvent() может привести к бесконечной рекурсии. Примечание. Установка размера в QSize (0, 0) приведет к тому, что виджет не появится на экране. Это также относится к окнам.

Таким образом, вы можете переопределить 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 не являются операционными, поскольку они просто устанавливают свойства, которые потребляются системой компоновки.

Смежные вопросы