1、Qt报错error: ‘QTabBar* QTabWidget::tabBar() const’ is protected within this context
//使用下面语句时报错,本人使用QT3.5版本
ui->tabWidget->tabBar()->setStyle(new CustomTabStyle);
2、报错原因:
5.0以下版本tabBar()是受保护的(即私有成员),无法被外部调用,而5.0以上版本Qt则改为公有的了。
3、解决办法
打开编译库。比如我使用的是linux下的QT编译库v7。把QTabBar* tabBar() const; 改为公有的就可以了,该成员在qtabwidget.h 中。操作如下:
1、打开终端输入
find -name qtabwidget.h
2、打开qtabwidget.h
比如我查找到的路径为
./toolchain/v7-toolchain/arm-buildroot-linux-gnueabi/sysroot/usr/include/QtGui/qtabwidget.h
用vim打开qtabwidget.h命令
vim ./toolchain/v7-toolchain/arm-buildroot-linux-gnueabi/sysroot/usr/include/QtGui/qtabwidget.h
3、修改qtabwidget.h
把下图1中protected: 下的QTabBar* tabBar() const; 剪切到public: 下,如图2所示
图1
图2
保存:
改完后按Esc,输入下命令按回车保存:
:wq
这时去编译就发现没问题了
总结:
出现这个问题主要是构建使用的版本低导致如下图版本4.8.7就不行。这时我们只需要去找到他的库对应定义**QTabBar* tabBar() const;**的地方把私有改为公有就可以了。