2013-09-27 5 views
0

물론 레이아웃을 사용하는 GUI 너비 Qt Creator (Qt 5.0.1)를 만들었습니다. 미적 이유 때문에 QPushButton을 GUI의 다른 구석에있는 또 다른 QPushButton과 동일한 폭으로 만들고 싶습니다. 이 다른 버튼은 창 크기를 변경할 때 크기를 동적으로 변경하므로 원하는 동작입니다.링크 QPushButton 너비를 다른 QPushButton

레이아웃을 변경하지 않고 버튼의 크기를 (동적으로) 연결할 수 있습니까? 가능하다면 고정 된 크기를 피하고 싶습니다.

답변

2

first의 resizeEvent를 재정 의하여 신호 (크기 포함)를 second로 보낼 수 있습니다.

+0

,하지만 결국 내가 그것을했다 당신이 제안한대로 잘 작동합니다. – Chris

0

다음 솔루션을 제안합니다 (하위 클래스 버튼 클래스 없음). 실제로 QPushButtons뿐만 아니라 모든 위젯의 동기화에 코드 벨로우즈를 사용할 수 있습니다.

SizeSynchronizer 클래스 - 클래스 사용의

/// Synchronizes the given widget's size with other's - one that the SizeSynchronizer installed on. 
class SizeSynchronizer : public QObject 
{ 
public: 
    SizeSynchronizer(QWidget *w) 
     : 
      m_widget(w) 
    {} 

    bool eventFilter(QObject *obj, QEvent *ev) 
    { 
     if (m_widget) { 
      if (ev->type() == QEvent::Resize) { 
       QResizeEvent *resizeEvent = static_cast<QResizeEvent *>(ev); 
       m_widget->resize(resizeEvent->size()); 
      } 
     } 
     return QObject::eventFilter(obj, ev); 
    } 
private: 
    QWidget *m_widget; 
}; 

간단한 데모는 두 개의 버튼 동기화 :

int main(int argc, char *argv[]) 
{ 
    [..] 
    // First button will be synchronized with the second one, i.e. when second 
    // resized, the first one will resize too. 
    QPushButton pb1("Button1"); 
    QPushButton pb2("Button2"); 

    // Create synchronizer and define the button that should be synchronized. 
    SizeSynchronizer sync(&pb1); 
    pb2.installEventFilter(&sync); 

    pb2.show(); 
    pb1.show(); 
    [..] 
} 
내가 더 "내장"솔루션이 있었다는 것을 희망
+0

제안 해 주셔서 감사합니다. 코드를 사용해 보았지만 불행히도 작동하지 않습니다. eventFilter 메서드에서 qDebug 출력을 배치하고 창 크기를 조정할 때 호출되지 않는다는 것을 알았습니다. 양식 편집기를 사용하여 GUI를 만들었습니다. 이유가있을 수 있습니까? – Chris

+0

오른쪽 단추에 이벤트 필터를 설치 했습니까? – vahancho

+0

예 잘못된 버튼을 사용해도 윈도우 크기를 변경할 때 모든 버튼의 크기가 다시 조정되므로 디버그를보아야합니다. – Chris