From the Qt documentation (qt6), QTabWidget::setCornerWidget: says:
Note: Corner widgets are designed for North and South tab positions; other orientations are known to not work properly.
That means they do work, but are messy to and inconvenient to use.
Here's a way to use QTabWidget corner widget on the side:
As already noted in the question, setting a corner widget while tabs position is West or East, causes a small gap before the tabs without anything appearing there.
But if you set QTabWidget's corner widget minimum size, it will appear, which solves a problem but causes another, because now I need to calculate that size myself, or make room for my corner widget.
Here's an MRE that I used to try and figure how to get that empty corner size:
QTabWidget *t = new QTabWidget();
//I needed the stacked widget so I can use its geometry to calculate the empty corner size
QStackedWidget *stack_widget = t->findChild<QStackedWidget*>("qt_tabwidget_stackedwidget");
t->setMinimumSize(800,600);
t->addTab(new QWidget(),"Tab1");
t->addTab(new QWidget(),"Tab2");
t->addTab(new QWidget(),"Tab3");
t->addTab(new QWidget(),"Tab4");
t->setTabPosition(QTabWidget::TabPosition::West);
QToolButton *button1 = new QToolButton();
button1->setIcon(QIcon(":/icons/collapse.png"));
t->setCornerWidget(button1,Qt::TopLeftCorner);
t->show();
//width is equal to where the stack widget starts (x coordinate)
//height is equal to where the tab bar starts (y coordinate)
//I subtracted 1 from stackwidget's x because it simply looked better
t->cornerWidget(Qt::TopLeftCorner)->setMinimumSize(stack_widget->geometry().x()-1,
t->tabBar()->geometry().y());
//checking related widgets geometries
/*qDebug()<<"cornerWidget geo"<<t->cornerWidget(Qt::TopLeftCorner)->geometry();
qDebug()<<"tabBar rect"<<t->tabBar()->tabRect(0);
qDebug()<<"tabBar geo"<<t->tabBar()->geometry();
qDebug()<<"stackwidget geo"<<sw->geometry();*/
Here's how it looks, I used a custom icon:
[image: u2kMS.png]
If you need more space for the corner widget, you'll need to move the tab bar, because corner widget will cover it, you can do that using stylesheet. See this: Qt Style Sheets Examples: Customizing QTabWidget and QTabBar.
Here's an example of stylesheet:
t->setStyleSheet("QTabWidget::tab-bar "
"{"
"top: 50px;" /* push down by 50px */
"}");
Here's how it looks with that being the only addition and change to my MRE:
[image: GYKGX.png]
Suggestion: QTabWidget::paintEvent might be a better solution.