QTabWidget, setting colour of tab itself ?
-
@JoeCFD , @JonB , @J-Hilk , I've progressed this to the point where it gets all the way to:
opt.palette.setColor(QPalette::Button, color);
I output the color to the log file and its valid and the name() returns #ff0000. But still the colour of the tab doesn't change, again in my standard alone test project it does the same and in this it works...so why doesn't it work here?
-
-
@JoeCFD said in QTabWidget, setting colour of tab itself ?:
@SPlatten Good idea. Try to change the texts to see if it works.
I've modified the code where it sets the colour to also change the tab text:
setTabText(intTab, "modified: " + tabText(intTab));
[Edit] With this code in place I can see that no tab text is modified, which makes me wonder what is going on, the tabs show the same as defined in the UI file, but it appears they aren't the same in that they cannot be modified???
-
@JoeCFD , so now I'm looking at why this is the case and what I can do to fix it.
[Edit] I removed this:
<header location="global">ws_status_page.h</header>
From the customWidget defining the class TabWidget and now the modified text is visible, although when I applied the modified text to the project that the colours work in, the colours don't work while the text is modified, so I'm now rebuilding and testing without modified text...
[Edit#2] Sadly having removed the code that modified the text the colour still isn't set. But this does still work in the other project when I removed the modified text.
-
@JonB , @JoeCFD , @J-Hilk I'm still working on this and trying to find a solution, in the test project I created I've added to the end the TabBar::paintEvent function:
QPen objPen(QColor("#ffff00")); objPen.setWidth(3); painter.setPen(objPen); painter.drawLine(0,0,100,100);
Having cleaned and rebuilt both projects I can see the thick yellow diagonal line drawn in both projects, but only the prototype I created has the tabs drawn with a red background.
-
@SPlatten I still suspect that not the right tab is called. You do need to check their pointer addresses match exactly. Try to make only one tab in your project for testing. If this is confirmed, you need to dig into the source code to check what can block the change of color. There must be some flags for this.
-
@SPlatten said in QTabWidget, setting colour of tab itself ?:
initStyleOption
Can you make a debug build of Qt? Then build your project in debug mode and you can easily check into the source code to see what is going on? There must some tiny change which is missing. You are so close now.
-
@JoeCFD , at this point I'm out of ideas as to why it isn't working, at a guess I would say the paintEvent is not using the correct painter which means the "this" context isn't correct.
In "my" own project I created using the UI from the project that doesn't work, I have a working set of tabs where I can set the tab colours using flags and the paintEvent which is identical to the source in the project that doesn't work.
I've looked very carefully at everything I can and I just can't see where the issue is.
Project that works, mainwindow.ui contains:
centralWidget QFrame tab_widget overall_tab more tabs...
The bottom of the UI file contains:
<customwidgets> <customwidget> <class>TabWidget</class> <extends>QTabWidget</extends> <header>tabwidget.h</header> <container>1</container> </customwidget> </customwidgets>
Project that doesn't work, has the same structure as the project that does work. Any suggestions welcome.
-
@SPlatten suggestion,
- make a backup :D
- remove the not working class entirely, cpp, h and ui file
- replace the removed files with the ones from your working example
- adjust the api with dummy functions so it compiles
- see if it works as expected
- if it does add functionality from old file back in, and regular check if it still works
-
@J-Hilk , thank you, that's a massive job in itself...is there any tracing I can add to the paintEvent in the tabBar to see why one works and the other doesn't....
I'm going to compromise and try to use pre-processors to comment out sections of the CPP, rebuild and see if that works, commenting out almost everything to begin with.