Qt: Как добавить два виджета (скажем, QPushButton) в строку состояния, один слева и другой справа?

Я хотел бы добавить два виджета (скажем, QPushButton) в строке состояния, один слева и другой справа.

Я думаю о добавлении горизонтальной прокладки между двумя виджетами, но не знаю, как добавить.

PS: я пытался использовать addWidget() добавить слева и addPermanentWidget() добавить справа, но это не выглядит аккуратно, а также он не чувствует себя хорошо.

6

Решение

Вы можете добавить две кнопки к макету в виджете и добавить виджет в строку состояния, используя QStatusBar::addWidget :

QWidget * widget = new QWidget();
QPushButton  * leftBut = new QPushButton("Left");
QPushButton  * rightBut = new QPushButton("Right");
QGridLayout * layout = new QGridLayout(widget);
layout->addWidget(leftBut,0,0,1,1,Qt::AlignVCenter | Qt::AlignLeft);
layout->addWidget(rightBut,0,1,1,1,Qt::AlignVCenter | Qt::AlignRight);
ui->statusBar->addWidget(widget,1);
7

Другие решения

Я думаю о добавлении горизонтальной прокладки между двумя виджетами, но не знаю, как добавить.

Вот способ использования «поддельной» проставки.

QPushButton *leftButton = new QPushButton("Left");
QPushButton *rightButton = new QPushButton("Right");
QLabel *spacer = new QLabel(); // fake spacer
ui->statusBar->addPermanentWidget(leftButton);
ui->statusBar->addPermanentWidget(spacer, 1);
ui->statusBar->addPermanentWidget(rightButton);

Второй параметр в addPermanentWidget «используется для вычисления подходящего размера для данного виджета, когда строка состояния увеличивается и уменьшается».

Демо-версия:

Результат выглядит так.

1

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

QGridLayout *myGridLayout = new QGridLayout();
statusbar->setLayout(myGridLayout)

QPushButton *button1 = new QPushButton(this);
myGridLayout->addWidget(button1,0,0,1,1);

QPushButton *button2 = new QPushButton(this);
myGridLayout->addWidget(button2,X,0,1,1);

Самый большой X чем больше места вы хотите оставить между ними, я бы предложил начать с 3, а затем сделать несколько тестов, чтобы увидеть, как это выглядит.

0
По вопросам рекламы [email protected]