如何为 QTabWidget 中的选项卡设置布局?

问题描述 投票:0回答:5

我已经使用

Qt Design
工具创建了 QTabWidget(没有选项卡),现在我需要创建选项卡并动态添加小部件。

我可以使用以下代码创建选项卡并添加小部件:

MyCustomWidget *myCustomWidget = new MyCustomWidget(this);
ui->myTabWidget->addTab(myCustomWidget, "New Tab");

问题是小部件停留在我的

QTabWidget
的左上角,但我需要将它对齐到我的
QTabWidget
的中心(水平)。

如何为创建的新选项卡设置水平布局?

注1:我的小部件(

MyCustomWidget
)具有固定大小。

注2:我使用的是Qt 5.3。

c++ qt qlayout
5个回答
8
投票

您可以使用QT设计器。 选择 QTabWidget 并将需要其布局更改为可见的选项卡(并且它必须包含元素,例如 QLabel 等..) 选择QTabWidget->右键->布局->垂直布局 问题是在 Qwidget 上做更直观,而你必须在 QTabWidget 上做


2
投票

它将始终位于左上角。您可以在您的窗口小部件之上添加另一个窗口小部件,然后将您的窗口小部件放在该窗口小部件的中间,或者使您的窗口小部件具有选项卡的大小并将其内容放置在中间。您可以使用 QWidget 的

setLayout
方法来设置您的小部件布局。


2
投票

你不需要 QFrame,一个简单的 QWidget 和一个居中布局就可以了:

auto w = new QWidget;

auto txtEdit = new QTextEdit; // Replace with whatever custom widget
txtEdit->setFixedSize(150, 150); // Only here to simulate your fixed size

auto layout = new QVBoxLayout;
layout->addWidget(txtEdit, 0, Qt::AlignHCenter);
w->setLayout(layout);

ui->tabWidget->addTab(w, "MyTab");

1
投票

我使用基于QT 5.11.1的QT Creator 4.7.0。 我无法使用 QT 设计器更改 QTabWidget 选项卡的布局。布局中的所有项目均被禁用。我很奇怪。我解决这个问题的唯一方法是编辑 ui 文件(在我的例子中是 mainwindow.ui 文件)。 来自:

<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Insert Object</string>
</attribute>
</widget>

致:

<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Insert Object</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
</layout>
</widget>

因此,QTabWidget 的选项卡布局发生了变化。 谢谢。


0
投票

按照@Satus的想法,我创建一个新的

QFrame
,将最小尺寸设置为myTabWidget的大小,设置水平布局并在其中添加myCustomWidget,添加两个
QSpacerItem
(左和右):

QFrame *frame= new QFrame(this);
frame->setMinimumWidth(ui->myTabWidget->width());
frame->setMinimumHeight(ui->myTabWidget->height());

MyCustomWidget *myCustomWidget = new MyCustomWidget(frame);

QHBoxLayout *hLayout = new QHBoxLayout();

hLayout->addItem(new QSpacerItem(10, 10, QSizePolicy::Expanding, QSizePolicy::Expanding));
hLayout->addWidget(myCustomWidget);
hLayout->addItem(new QSpacerItem(10, 10, QSizePolicy::Expanding, QSizePolicy::Expanding));

frame->setLayout(hLayout);

ui->myTabWidget->addTab(frame, "New Tab");

它有效,但如果有人有更优雅的方法,请与我们分享。

© www.soinside.com 2019 - 2024. All rights reserved.