2017-12-20 36 views
0

QListWidgetQPushButtonQListWidget을 지울 수 있습니다. 지금 내 버튼은 QListWidget 옆에 있으며 어색한 빈 공간이 있습니다.다른 위젯 위에 QPushButton 정렬

enter image description here

나는 QListWidget 위에 버튼을 배치 할 그래서 그 오른쪽 하단 모서리를 커버 것입니다.

난 그냥이

QPushButton* button = new QPushButton(ui->listwidget); 
button->show(); 

처럼 버튼을 배치 시도하고 내 위젯을 통해 "부동"버튼을 생성하지 않습니다,하지만 난 그것을 정확하게 배치 할 수있는 방법을 찾을 수 없습니다. 어쩌면 나는 시련과 오류로 올바른 코리 더 탄스를 찾을 수 있지만 문제는 내 메인 윈도우의 크기를 조정할 수 있기 때문에 버튼이리스트 중간이나 부적절하게 보이지 않게하는 것입니다.

이보다 더 좋은 사람이 있습니까?

+0

레이아웃을 사용하지 않습니까? – TCouch

+0

@ TCouch 글쎄, 나는이 어색한 빈 공간을 남겼다. 단추 아래에 단추를 놓고 버튼의 높이와 동일한 전체 스트립이 비어 있었고 단추는 약간의 공간 만 사용했습니다. – madasionka

+0

스크린 샷을 보는 것이 유용 할 수도 있습니다. – TCouch

답변

1

문제가 얼마나되는지 또는 최종 결과가 마음에 들지는 모르겠지만 가능해야합니다. 그러나 간단히 말해서 ...

QPushButton을 부모로 사용하여 창을 만듭니다 (나는 QListWidget이 창 또는 다른 레이아웃 인 QWidget에 있다고 가정합니다). 부모 위젯이 무엇이든간에, 그것은 버튼의 위치 좌표에 대한 참조 프레임이됩니다.

그러면 버튼을 QWidget::pos과 위치시킬 필요가 있습니다. 트릭은 언제 어디서입니다.

위치가 부모와 관련되어 있으므로 부모의 너비와 높이를 QWidget::size()으로 가져와 단추의 너비와 높이 (QWidget::frameSize())를 빼고 그에 따라 새 위치를 설정해야합니다.

상위 위젯의 각 크기 조정 이벤트에 대해이 작업을 수행해야합니다. 따라서 한 가지 방법은 부모 창에 QWidget::resizeEvent()을 다시 구현하고 거기에서 버튼을 배치하는 것입니다.

이 테스트되지 않은 상태입니다 ...

QPushButton* button = new QPushButton(this); // parent is current QWidget 
button->show(); 
... 
void MyWidget::resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE 
{ 
    QSize btnSize = button->frameSize(); 
    QSize containerSize = this->size(); 
    int newX = containerSize.width() - btnSize.width() - 10; // 10 is arbitrary margin 
    int newY = containerSize.height() - btnSize.height() - 10; 
    // position the button 
    button->move(newX, newY); 
    // call the superclass handler: substitute the actual superclass here 
    QWidget::resizeEvent(event); 
} 

당신이 가장 가능성이 더 아마도 꽤 물건을 조정할 필요가있을 것이다, 그러나 그것은 일반적인 생각해야한다. 핵심은 처음에 표시 될 때를 포함하여 부모의 각 크기 조정시 버튼 위치를 변경하는 것입니다.

HTH