QScrollBar 在编译到桌面和嵌入式 Linux 环境之间有区别
Posted
技术标签:
【中文标题】QScrollBar 在编译到桌面和嵌入式 Linux 环境之间有区别【英文标题】:QScrollBar having difference between compiling to Desktop and to Embedded Linux environment 【发布时间】:2014-09-30 14:31:51 【问题描述】:最近我在this question 中找到 SO,询问我如何才能获得 QComboBox 的 QScrollBar 以改变其厚度。阅读回复后,我为我的 Qt Embedded 应用程序尝试了 Marco A. 解决方案,但没有成功。然后,为了测试,我将编译环境更改为桌面,并且修复成功了!
所以本质上我的问题是,当我尝试在 Qt for Embedded Linux (ARM) 中更改 QComboBox 的 QScrollBar 宽度时,什么也没有发生,但如果我为 Qt for Desktop 编译完全相同的代码,它就可以工作。以下是我用于测试的代码:
QAbstractItemView* poView = ui->comboBox->view();
QScrollBar* poBar = poView->verticalScrollBar();
poBar->setStyleSheet("width: 50px;");
还有另一个代码做同样的事情,但显示同样的问题:
ui->comboBox->setStyleSheet("QScrollBar:vertical width: 50px; ");
comboBox
在 Qt Designer(在 Qt Creator 中)的 ui 表单中声明。
Qt 版本对于 Desktop 和 Qt for Embedded Linux (4.8.5) 是相同的。我发现奇怪的另一件事(但应该与它无关)是再次为桌面编译相同的代码显示具有 Windows XP 样式的 QComboBox,而对于嵌入式则使用 Plastique 样式(我注意到由于 Plastique显示三个而不是两个按钮来滚动滚动条)。
那么会发生什么?我该如何解决这个问题?
【问题讨论】:
【参考方案1】:我注意到了同样的症状。据我所知,在 Qt 中,很多绘图都已委托给样式,而 Plastique 样式似乎有一个错误,即如果没有,它似乎不会在正确的坐标中绘制垂直滚动条默认大小。所以如果你这样做:
QScrollBar:vertical
min-width: 35px;
width: 35px;
您最终会出现您所描述的症状。但是,AFAICS 处理边距也有问题!如果你玩弄边距,例如像这样:
QScrollBar:vertical
min-width: 35px;
width: 35px;
margin-right: 35px;
您应该能够解决该错误。
至少对我有用。
【讨论】:
感谢您的打字。事实上,该解决方案在控制滚动条的宽度方面效果很好。现在的问题是控件出现了错误:如果我单击滚动条的任何部分,但向下箭头,滚动条会上升!你知道如何解决这个问题吗?【参考方案2】:poBar->setMinimumWidth(50);
poBar->setMaximumWidth(50);
我在 Python3 语法中使用 PyQt5、QT5 进行了尝试,它在 Linux(Ubuntu 14.04)以及 windows7 上自定义了滚动条的宽度
【讨论】:
感谢您的回复,但我之前已经测试过这个解决方案,对于 Ubuntu 和嵌入式 Linux 它都不起作用:虽然它确实改变了栏的宽度,但它并没有改变宽度栏所在的空间,所以最后调整大小的 QScrollBar 看起来像以前一样被切割并具有相同的有用区域。抱歉没有显示打印,但我想我很遗憾 ubuntu 不允许我在 QComboBox 列表可见的情况下进行打印。 @Momergil:你试过 pobar->setGeometry() 吗?以上是关于QScrollBar 在编译到桌面和嵌入式 Linux 环境之间有区别的主要内容,如果未能解决你的问题,请参考以下文章