如何在 QTabWidget 中为选项卡设置布局?
How can I set a layout to a tab in QTabWidget?
我已经使用 Qt Design 工具创建了一个 QTabWidget
(没有选项卡),现在我需要创建选项卡并动态添加小部件。
我可以使用以下代码创建选项卡并添加小部件:
MyCustomWidget *myCustomWidget = new MyCustomWidget(this);
ui->myTabWidget->addTab(myCustomWidget, "New Tab");
问题是小部件停留在我的 QTabWidget
的左上角,但我需要将它对齐在我的 QTabWidget
.
的中心(水平)
如何为创建的这个新标签页设置水平布局?
注意 1:我的小部件 (MyCustomWidget
) 具有固定大小。
注2:我正在使用Qt 5.3。
它总是在左上角。您可以在您的顶部添加另一个小部件,然后他们将您的小部件放在该小部件的中间,或者使您的小部件与选项卡大小相同,并将其内容放在中间。您可以使用 QWidget 的 setLayout
方法来设置您的小部件布局。
按照@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");
成功了,但如果有人有更优雅的方法,请与我们分享。
您不需要 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");
我使用基于 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 的选项卡布局发生了变化。
谢谢
你可以使用QT设计器。
Select QTabWidget 并使需要其布局更改的选项卡可见(并且它必须包含元素,例如 QLabel 等。)
右键->布局->垂直布局
问题是在 Qwidget 上做它很直观,而你必须在 QTabWidget
上做
我已经使用 Qt Design 工具创建了一个 QTabWidget
(没有选项卡),现在我需要创建选项卡并动态添加小部件。
我可以使用以下代码创建选项卡并添加小部件:
MyCustomWidget *myCustomWidget = new MyCustomWidget(this);
ui->myTabWidget->addTab(myCustomWidget, "New Tab");
问题是小部件停留在我的 QTabWidget
的左上角,但我需要将它对齐在我的 QTabWidget
.
如何为创建的这个新标签页设置水平布局?
注意 1:我的小部件 (MyCustomWidget
) 具有固定大小。
注2:我正在使用Qt 5.3。
它总是在左上角。您可以在您的顶部添加另一个小部件,然后他们将您的小部件放在该小部件的中间,或者使您的小部件与选项卡大小相同,并将其内容放在中间。您可以使用 QWidget 的 setLayout
方法来设置您的小部件布局。
按照@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");
成功了,但如果有人有更优雅的方法,请与我们分享。
您不需要 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");
我使用基于 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 的选项卡布局发生了变化。 谢谢
你可以使用QT设计器。 Select QTabWidget 并使需要其布局更改的选项卡可见(并且它必须包含元素,例如 QLabel 等。) 右键->布局->垂直布局 问题是在 Qwidget 上做它很直观,而你必须在 QTabWidget
上做