为什么我的 corner-widget 没有出现在 QTabWidget 中?
Why does my corner-widget not show up in QTabWidget?
我有一个 QTabWidget,我想在右上角有 两个 按钮。
我使用此代码添加一个垂直布局作为角落小部件,并向其添加两个按钮:
QWidget* cornerWidget = new QWidget();
QVBoxLayout* vbox = new QVBoxLayout();
QPushButton* button1 = new QPushButton("Button 1");
QPushButton* button2 = new QPushButton("Button 2");
vbox->addWidget(button1);
vbox->addWidget(button2);
ui->myTabWidget->setCornerWidget(cornerWidget);
cornerWidget->setLayout(vbox);
cornerWidget->show();
但是当我 运行 我的程序时,右上角根本没有显示任何小部件。
如果我使用这个简化的代码只添加一个按钮,它会完美地工作并显示我的按钮:
QPushButton* button1 = new QPushButton("Button 1")
ui->myTabWidget->setCornerWidget(button1);
原因
角落小部件的位置受到限制。您使用垂直布局,其内容边距将按钮向下移动,看不见。
解决方案
使用水平布局并将内容边距设置为 0
。
例子
这是我为您编写的示例,用于演示如何实施建议的解决方案:
auto *cornerWidget = new QWidget(this);
auto *hbox = new QHBoxLayout(cornerWidget);
auto *button1 = new QPushButton(tr("Button 1"), this);
auto *button2 = new QPushButton(tr("Button 2"), this);
hbox->addWidget(button1);
hbox->addWidget(button2);
hbox->setContentsMargins(0, 0, 0, 0);
ui->myTabWidget->setCornerWidget(cornerWidget);
结果
给出的示例产生以下结果:
我有一个 QTabWidget,我想在右上角有 两个 按钮。 我使用此代码添加一个垂直布局作为角落小部件,并向其添加两个按钮:
QWidget* cornerWidget = new QWidget();
QVBoxLayout* vbox = new QVBoxLayout();
QPushButton* button1 = new QPushButton("Button 1");
QPushButton* button2 = new QPushButton("Button 2");
vbox->addWidget(button1);
vbox->addWidget(button2);
ui->myTabWidget->setCornerWidget(cornerWidget);
cornerWidget->setLayout(vbox);
cornerWidget->show();
但是当我 运行 我的程序时,右上角根本没有显示任何小部件。
如果我使用这个简化的代码只添加一个按钮,它会完美地工作并显示我的按钮:
QPushButton* button1 = new QPushButton("Button 1")
ui->myTabWidget->setCornerWidget(button1);
原因
角落小部件的位置受到限制。您使用垂直布局,其内容边距将按钮向下移动,看不见。
解决方案
使用水平布局并将内容边距设置为 0
。
例子
这是我为您编写的示例,用于演示如何实施建议的解决方案:
auto *cornerWidget = new QWidget(this);
auto *hbox = new QHBoxLayout(cornerWidget);
auto *button1 = new QPushButton(tr("Button 1"), this);
auto *button2 = new QPushButton(tr("Button 2"), this);
hbox->addWidget(button1);
hbox->addWidget(button2);
hbox->setContentsMargins(0, 0, 0, 0);
ui->myTabWidget->setCornerWidget(cornerWidget);
结果
给出的示例产生以下结果: