2017-11-06 1 views
0

내 애플 리케이션에서 윈도우의 오른쪽 테두리에 버튼을 정렬하고 싶습니다. 이미 레이아웃을 사용하려고했지만 작동하지 않습니다. 버튼은 왼쪽 테두리 옆에 있습니다. 다음 코드 : 나는 오른쪽 또는하지 않으면Qt 레이아웃이 작동하지 않습니다.

MainWindow::MainWindow() 
{ 

this->setStyleSheet(
        "QMenu {background-color: #555555; color: #EEEEEE; selection-background-color: #222222; border: 1px solid #222222;}" 
        "QMenuBar {background-color: #555555; color: #EEEEEE;}" 
        "QMenuBar::Item:selected {background-color: #333333; color:#EEEEEE;}" 
        "QMenuBar::Item:pressed {background-color: #111111;}" 
        "QToolBar {background: #555555; border-top: 1px solid #222222;}" 
        "MainWindow {background: black;}" 
        "QToolButton { background-color: transparent; border: none; }" 
        ); 

initButtons(); 
} 

void MainWindow::initButtons() 
{ 
QPushButton *playButton = new QPushButton(this); 
    playButton->setAutoFillBackground(true); 
    playButton->setStyleSheet("background-color: rgb(40, 40, 40);"); 
    playButton->setToolTip("Play"); 
    this->layout()->addWidget(playButton); 
    this->layout()->setAlignment(playButton, Qt::AlignRight); 
} 

누군가가 말해 줄래? 왜 작동하지 않는거야?

+0

어떤 레이아웃을 설정하셨습니까? "이 위젯에 설치된 레이아웃 관리자를 반환하거나 레이아웃 관리자가 설치되지 않은 경우 0을 반환합니다." (from http://doc.qt.io/qt-5/qwidget.html#layout) –

+0

레이아웃을 추가하지 않았습니다. 새 레이아웃을 추가하려고하면 "QLayout을 추가하려고합니다." "MainWindow" "에 이미 레이아웃이 있습니다"라는 메시지가 표시되므로 이미 레이아웃이 있다는 것을 신뢰합니다. –

+0

예제 코드는 문제의 컨텍스트를 완벽하게 제공해야 사람들이 자신이하는 일을 추측 할 필요가 없습니다 (예 : 'QMainWindow'가 필수 임). –

답변

2

당신은 당신이 공간을 추가하려는 경우, 당신은 spacer item을 사용할 수 있습니다

에서 오른쪽 왼쪽에서 다음 위젯을 추가

최초의 수평 레이아웃을 추가해야합니다.

QWidget * poCentralWidget = new QWidget(this); 
QHBoxLayout * poHLayout = new QHBoxLayout; 
poCentralWidget->setLayout(poHLayout); 

// Spacer item 
QWidget * poSpacerItem = new QWidget(this); 

poSpacerItem->setSizePolicy(
      QSizePolicy::Minimum,QSizePolicy::Maximum); 

// Add spacer item 
poHLayout->addWidget(poSpacerItem); 
// Add your button to the right side. 
poHLayout->addWidget(playButton); 

this->setCentralWidget(poCentralWidget); 
+0

"QWidget :: setLayout : QLayout 설정 시도 중" "MainWindow" "에 이미 레이아웃이있는"메시지가 나타납니다. 버튼이 아직 왼쪽에 있습니다. –

+0

기본 창에서 작업하는 것을 깨닫고 대답을 편집했습니다. – Simon

+0

작동 중입니다. 감사합니다. –

관련 문제