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

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

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

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

3 ответов


вы можете добавить две кнопки в макет виджета и добавить виджет в строку состояния с помощью 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);

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

вот способ использовать "поддельную" прокладку.

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 "используется для вычисления подходящего размера для данного виджета по мере роста и сжатия строки состояния".

демо:

Result looks like this.


Я думаю, самый простой способ-использовать 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, а затем сделать несколько тестов, чтобы увидеть, как это выглядит.