如何在QTabWidget中为布局设置布局?

时间:2017-03-29 15:40:52

标签: c++ qt qlayout

我使用 Qt Design 工具创建了QTabWidget(没有标签页),现在我需要创建标签并动态添加小部件。

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

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

问题是小部件停留在QTabWidget的左上角,但我需要将其对齐QTabWidget的中心(水平)。

如何为创建的新标签设置水平布局?

注1 :我的小部件(MyCustomWidget)的大小固定。

注2 :我正在使用Qt 5.3。

5 个答案:

答案 0 :(得分:2)

它始终位于左上角。您可以在您的上方添加另一个小部件,然后将小部件放在该小部件的中间,或者使小部件与选项卡的大小相同,并将其内容放在中间。您可以使用QWidget的setLayout方法来设置窗口小部件布局。

答案 1 :(得分:1)

你不需要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");

答案 2 :(得分: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");

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

答案 3 :(得分:0)

我使用基于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的选项卡的布局已更改。 谢谢。

答案 4 :(得分:0)

您可以使用QT设计器。 选择QTabWidget,并使需要更改其布局的Tab可见(并且它必须包含元素,例如QLabel等。) 右键单击->布局->垂直布局 问题在于,在Qwidget上执行此操作很直观,而在QTabWidget上必须执行此操作