I have a QTabWidget
like this one:
But I want to expand the tabs to "fill" the entire widget width, like this:
How can I do that?
I am using Qt 5.3.2 and Qt Creator 3.2.1
Update:
I tried to use the setExpanding
function:
ui->myTabWidget->tabBar()->setExpanding(true);
But it didn't work.
This works as well:
As mostefa answered here, I can set a fixed width for the tabs using styleSheet.
I am calculating the width based on the
QTabWidget
width.To get the
QTabWidget
width correctly I need to get it in theshowEvent
function:Suggestion from Mitak worked. Assuming the tabwiget is in the centralwidget of the mainwindow, one can replace a tabwidget created with the designer as follow in the code :
if the tabwidget is situated in another location or in a dialog, one need to replace it in the appropriate layout.
I found that
QTabBar
has asetExpanding
method, which appears to do exactly what you want, but I tried it (on Windows), and it doesn't work. This is the code:Then I found the following post:
https://forum.qt.io/topic/47404/qtabbar-will-not-expand-its-tabs
I find the answer provided in the above post to be debatable. He says it's respecting the operating system style whether or not the expanding property is set to true and that it's a feature, not a bug, and that you have to subclass
QTabBar
to get the desired behavior. If I write code to do a specific thing, I feel like my instructions should override the OS style. If I just wanted the OS style, I would leave that special code out. However much I disagree with the implementation, that appears to be what we're stuck with.So if it's important to you to have this look, then you'll need to subclass
QTabBar
, override thetabSizeHint
--I suspect that will take some experimentation--and useQTabWidget::setTabBar
to replace the default with your own. According to the documentation, you have to do that before adding any tabs, so this mechanism is not workable if you want to create your tab widget in Qt Designer. (Another argument in favor of implementingsetExpanding
as an override to the OS style rather than the way it's been done.)