Проблема с раскладкой Qt, не могу убрать пробел - PullRequest
0 голосов
/ 24 ноября 2010

Доброе утро, я должен расположить некоторые QWidgets и макеты в основной макет, но у меня проблема с пробелом, который я не могу удалить.По сути, я хотел бы добиться горизонтальной компоновки, содержащей сетку и несколько кнопок (все в горизонтальной линии).Макет сетки (2x2) содержит 2 QLabels и 2 QLeds.К сожалению, Qt поместите пробел между макетом сетки и первой кнопкой, как вы можете видеть на прикрепленном изображении здесь http://img413.imageshack.us/img413/9132/problemhu.png Я бы удалил такое пространство.Вот код, который я написал:

QGridLayout* gl = new QGridLayout();
gl->setAlignment(Qt::AlignLeft);
gl->setContentsMargins(0, 0, 0, 0);
gl->addWidget(activeLabel, 0, 0);
gl->addWidget(m_focusLed, 0, 1);
gl->addWidget(encodingLabel, 1, 0);
gl->addWidget(m_encodingLed, 1, 1);

Это создало макет сетки и добавило на него QLabels и QLeds.Затем я добавляю кнопки в горизонтальный макет так:

  /* layout buttons */
  QHBoxLayout* lo = new QHBoxLayout();
  lo->setSpacing(0);
  lo->addLayout(gl); // <--here I add the grid layout
  lo->addWidget(m_goToBeginBtn);
  lo->addWidget(m_goToEndBtn);
  lo->addWidget(m_frewBtn);
  lo->addWidget(m_fforBtn);
  lo->addSpacing( 10 );
  lo->addWidget(m_ffrewBtn);
  lo->addWidget(m_ffforBtn);
  lo->addSpacing(10);
  lo->addWidget(m_prevBtn);
  lo->addWidget(m_nextBtn);
  lo->addWidget(m_playBtn);
  lo->addWidget(m_stopBtn);
  lo->addWidget(m_cutBtn);
  lo->addSpacing(10);
  lo->addWidget(m_zoomInBtn);
  lo->addWidget(m_zoomOutBtn);
  lo->addSpacing(10);
  lo->addWidget(m_bgSndCheckBox);
  lo->addWidget( m_showPanelBtn);

Я не знаю, почему Qt помещает такое пространство между макетом сетки и первой кнопкой.Я бы удалил это.Как я могу сделать?Я не получил помощи из списка рассылки Qt.

С наилучшими пожеланиями

1 Ответ

1 голос
/ 25 ноября 2010

Как это исправить, во многом зависит от того, какое поведение вы хотите увидеть. Я предполагаю, что вы хотите, чтобы этикетки и светодиоды оставались именно там, где они есть, и сохраняли свой размер.

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

Сначала удалите строку gl-> setAlignment (Qt :: AlignLeft).

Во-вторых, вы хотите убедиться, что вы правильно установили sizePolicy как на своих QLabels, так и на своих QLeds, потому что в противном случае ваши QLeds начнут изменять размеры по горизонтали. То, что вы хотите, это политика фиксированного горизонтального размера. Вот пример:

QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
label->setSizePolicy(sizePolicy);

Совершенно другой способ сделать то же самое - добавить несколько вызовов setStretch () в ваш горизонтальный макет. Но вам придется делать это для каждого столбца в макете, который вы хотите растянуть. В основном каждый для каждой кнопки, но пропускает расположение сетки в первом столбце. Вот так ...

lo->setStretch(1, 1);  // Column 1 is your first button
lo->setStretch(2, 1);
...
lo->setStretch(19, 1)l  // 19 columns in total, 15 buttons plus 4 spacing.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...