我有一个QTabWidget有几个固定大小的选项卡。我希望将标签小部件放置在布局中以使其与主窗口一起展开,但是当我缩小标签的右侧时会在标签右侧显示滚动条,或者在我拉伸时在标签右侧留出空白空间出来。我希望标签自动填充整个QTabWidget。如何使QTabWidget拉伸以避免滚动
回答
选项卡小部件非常严格地确保QTabBar内部是以最小尺寸创建的。但是,一切都不会丢失。
因为我们可以访问QTabBar及其中的标签,所以我们可以做些什么。我发现以下answer提出了一个简单的解决方法。
基本上使用样式表我们根据选项卡窗口小部件的当前宽度设置选项卡的宽度。然后,诀窍是确保如果选项卡窗口小部件的宽度发生变化,我们将重新进行此计算。
建议的做法是使用EventFilter。基本上所有需要的是下面的类:
// On resize events, reapply the expanding tabs style sheet
class ResizeFilter : public QObject
{
QTabWidget *target;
public:
ResizeFilter(QTabWidget *target) : QObject(target), target(target) {}
bool eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::Resize)
{
// The width of each tab is the width of the tab widget/# of tabs.
target->setStyleSheet(QString("QTabBar::tab { width: %1px; } ")
.arg(target->size().width()/target->count()));
}
return false;
}
};
然后为您的特定QTabWidget,只需安装事件处理程序:
ui.tabWidget->installEventFilter(new ResizeFilter(ui.tabWidget));
的Presto!
虽然有一件事我会添加到答案。由于无论显示文本如何,制表符的大小都相同,因此可能需要确保在QTabWidget上设置“elideMode”属性,以处理标签中没有足够空间显示整个标题的情况。这将截断文本以适合并添加“...”。
您需要将您的QSizePolicy设置为MinimumExpanding你的标签,窗口小部件,最小尺寸应定义为防止其萎缩,还设置setWidgetResizable(真)。还要为子窗口小部件设置正确的QSizePolicy,并为Tab窗口小部件定义一个布局(HBox,VBox,Grid)。
我添加了布局,设置了大小策略,虽然QTabWidget自己调整大小,但这些选项卡本身保持不变的最小大小。我用红色突出显示的区域是我试图水平拉伸的区域。任何想法。 – sj755
- 1. 如何避免Android中的滚动条拉伸列表视图
- 2. AndEngine Box2d - 如何避免关节“拉伸”?
- 3. 使用CGContextScaleCTM时避免拉伸描边
- 4. 避免拉伸图像(css,wordpress)
- 5. 如何避免横向滚动?
- 6. 如何避免滚动时写入DOM?
- 7. 如何避免页面滚动href =“#”?
- 8. 如何避免UpdatePane在AutoPostBack上滚动?
- 9. 非拉伸滚动型
- 10. 拉伸TableLayout内滚动型
- 11. 避免滚动以下重点MVVM
- 12. 滚动表格以避免溢出
- 13. 避免QTabWidget中重复的选项卡
- 14. 避免嵌套滚动条
- 15. 避免GWT DataGrid行滚动
- 16. 避免列表框滚动
- 17. 避免底部滚动条
- 18. 避免UIPageViewController“过度滚动”
- 19. 避免滚动页面
- 20. 拉伸HTML页面以便页面可以滚动
- 21. 如何在使用qtip时避免页面滚动?
- 22. 在滚动期间如何避免使用键盘?
- 23. 如何正确使用继承并避免向下滚动
- 24. 避免自动滚动到下在JScrollPane
- 25. 浮动元素右避免滚动条
- 26. 溢出-X,以避免任何水平滚动浏览器
- 27. TableLayout&滚动视图拉伸在布局
- 28. 拉伸和可滚动的内部div
- 29. 如何避免垂直下拉菜单在底部添加垂直滚动条?
- 30. 避免拉伸固定台高和可变行数的台线?
这工作。这并不完美,标签总是1或2像素太大,但它足够接近。谢谢您的帮助 :) – sj755