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:
Corner widget appeared
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:
Extended tab widget corner widget
Suggestion: QTabWidget::paintEvent might be a better solution.