2012-07-27 2 views
0

Внутри QWidget Я положил QHBoxLayoutwith, два QPushButton и QLabel. Я могу изменить геометрию QWidget, который работает в качестве контейнера для макета, но не может изменить размер QPushButton: вот мой кодQPushButton Geometry

void 
QTitleBar::resizeEvent(QResizeEvent * event) 
{ 
QSize size = event->size(); 
int widgetHeight = size.rheight(); 
int widgetWidth = size.rwidth(); 

std::cout << "resizeEvent h:" << 
    widgetHeight 
    << " w: " << widgetWidth << std::endl; 

int layoutH = (int)((float)widgetHeight*(float)0.20); 


std::cout << "resizeEvent h:" << 
    layoutH 
    << " w: " << widgetWidth << std::endl; 

mapButton->setGeometry(0, 0, 120, layoutH); 
titleWidget->setGeometry(0, 0, widgetWidth, layoutH); 

// title->setGeometry(130, 0, widgetWidth - (2*130), layoutH); 
// closeButton->setGeometry(widgetWidth - (2*130), 0, 130, layoutH); 

//closeButton->setGeometry(0, 0, widgetWidth, layoutH); 

} 

там что-то не так?

+0

ли положение кнопки получает изменяется при resizeevent? Только размер остается неизменным? А как насчет titlewidget? это изменение размера и перемещение, как в приведенном выше фрагменте кода? – ScarCode

+0

нет, все не изменилось. Единственное, что меняется, это геометрия titleWidget. Может быть, QHBoxLayoutwith ошибка? – Blackbelt

+0

проверьте размер для вашей карты, независимо от того, сдерживается ли она – ScarCode

ответ

1
mapButton->setMinimumSize(QSize(0,0)); 
    mapButton->setMaximumSize(QSize(10000,10000)); 

Теперь вы можете установить QPushButton любого размера (практически). Я надеюсь, что это решит проблему, поскольку titlewidget будет изменяться и перемещаться, как в коде.

+0

Кажется, что работает. Размер изменяется, но QWidget :: size() всегда возвращает значение QWidget :: sizeHint(). Почему это? – Blackbelt

+0

@Blackbelt If * mimimumSize * и * maximumSize * содержать * размерHint *, тогда * размер *, в зависимости от * размерPolicy *, должен быть изначально * sizeHint *. Это размер, который предпочитает * QWidget *. См. Http://stackoverflow.com/a/38118293/6385043 для некоторых ссылок. – maxik

1

[Некоторые советы для дальнейших читателей ...]

Как вы заметили, используя геометрию баттона свойства не правильный путь, потому что он находится под контролем, содержащий QLayout. См. here для обработки макета Qt или написания собственной реализации QLayout.

Также обратите внимание, что установка геометрииQWidget может привести к infinite loop!

Настройка свойств высоты и ширина в виде QWidget непосредственно работает тогда и только тогда, когда QWidget не содержится ни в одном QLayout. В противном случае он будет изменен в размере mimimumHeight и maximumHeight который относится к ширина как указано. (Обратите внимание, что свойство размера связывает только эти два.) Вы можете повлиять на это поведение, изменив свойство QWidget s sizePolicy.

Так придерживаться ScarCode's answer с помощью

QWidget.setMinimumSize(QSize) 
QWidget.setMaximumSize(QSize) 

Что касается Комплектность Я хотел бы отметить, что размер QPushButton также может быть изменена с помощью Qt style sheets:

QPushButton { 
    min-width: 0px; 
    max-width: 10000px; 
} 
+0

благодарит за обмен – Blackbelt