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