有一个添加了 QHBoxLayout 的窗口:问题的本质 - 必须以编程方式,通过代码 - 对齐元素QLineEdit* searchLine;
- 在布局中QHBoxLayout
。
澄清:最初,通过表单设计器 - 没有添加布局,也就是说,只是一个完全空的表单,您需要在其上以编程方式添加和对齐所有内容。
.h 文件:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QHBoxLayout* mainLayout;
QLineEdit* searchLine;
// QSpacerItem* LeftSerchSpacer;
// QSpacerItem* RightSerchSpacer;
};
我已经尝试做的事情:
.cpp 文件:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
mainLayout = new QHBoxLayout(this);
searchLine = new QLineEdit(this);
试图对齐整个布局:
mainLayout->setAlignment(Qt::AlignVCenter);
尝试添加“垫片”:
// LeftSerchSpacer = new QSpacerItem(2000,10);
// RightSerchSpacer = new QSpacerItem(*LeftSerchSpacer);
// mainLayout->addItem(LeftSerchSpacer);
添加空格:
// mainLayout->addSpacing(this->width()/2);
// mainLayout->setSpacing(this->width()/2);
// mainLayout->setMargin(this->width()/2);
// mainLayout->addStretch(100);
访问特定的小部件并对齐它:
添加时:
//mainLayout->addWidget(searchLine,20,Qt::AlignCenter);
添加后:
mainLayout->setAlignment(searchLine,Qt::AlignVCenter);
// mainLayout->addItem(RightSerchSpacer);
// mainLayout->addSpacing(100);
// mainLayout->addWidget(searchLine);
this->setLayout(mainLayout);
searchLine->setVisible(true);
ui->setupUi(this);
}
- 元素对齐的给定选项都不起作用。
PS - 不建议使用表单生成器。该项目具有教育意义,旨在通过编写代码掌握界面元素的创建和布局。我知道在实际项目中 - 没有人会遭受这样的痛苦。
UPD:我尝试了答案中的选项:
mainLayout->addStretch();
mainLayout->addWidget(searchLine);
mainLayout->addStretch();
和
mainLayout->setAlignment(Qt::AlignVCenter);
searchLine->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
mainLayout->addWidget(searchLine);
mainLayout->setAlignment(searchLine,Qt::AlignVCenter);
- 两者都没有效果。
(在 QLineEdit 小部件应该大约位于的位置用红色标记)
我怀疑你想做这样的事情:
这是它应该如何工作的:
而且,有了这个设置,就完全不需要ui了,可以直接把layout设置成一个空的QWidget,通过
setCentralWidget