为什么无法修改ListWidget的水平滑动块宽度

关于ListWidget滑动块宽度无法修改

img

this->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal {width: 60dpx;}");

以下答案基于ChatGPT与GISer Liu编写:
在设置ListWidget的水平滑动块宽度时,您可以尝试使用以下代码:

this->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal {width: 60px;}");

请注意,将宽度设置为60dpx是不正确的,正确的单位是60px。此外,如果您使用的是Qt样式表,请确保在应用样式表时没有其他样式表或代码覆盖了您设置的样式。如果您仍然无法成功修改滑动块宽度,您可以考虑使用QScrollBar的其他样式属性或Qt的paintEvent()方法自定义滑动条。

该回答内容部分引用GPT,GPT_Pro更好的解决问题
ListWidget是一种常见的Qt界面控件,它可以用来显示一组列表,可以拖动滚动条查看其中的内容。但是默认情况下,ListWidget滑动条的宽度是固定的,不会随着控件大小的变化而变化,所以很多开发者想要更灵活地控制ListWidget滑动条的宽度,但是ListWidget本身并没有提供这样的API,所以无法直接修改ListWidget的水平滑动块宽度。

作为一种解决办法,可以使用QStyle来修改ListWidget的水平滑动块宽度。QStyle是Qt中一个用于处理界面风格的类,它允许用户在不同平台或不同风格之间进行切换,以便在不同平台上显示出相同的界面效果。通过QStyle,开发者可以自定义界面元素的外观,如ScrollBar部件,它允许用户在不同平台之间显示出相同的界面效果。

使用QStyle修改ListWidget的水平滑动块宽度的方法如下:

  1. 创建一个新的QStyle对象:
    QStyle *style = new QStyle;
    
  2. 调用style对象的polish()方法:
    style->polish(listWidget);
    
  3. 调用style对象的pixelMetric()方法来设置新的水平滑动块宽度:
    int width = // 新的水平滑动块宽度 
    style->pixelMetric(QStyle::PM_ScrollBarExtent, listWidget, Qt::Horizontal, width); 
    
  4. 最后释放style对象:
    delete style; 
    
    通过以上步骤,就可以修改ListWidget的水平滑动块宽度了。
    如果回答有帮助,望采纳。

参考GPT和自己的思路,您可能需要更改您的样式表代码,使用像素(px)而不是设备独立像素(dpx)的单位。请尝试以下代码:

this->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal { width: 60px; }");

如果这不起作用,请检查您的样式表代码是否在应用程序的样式表中设置,或者检查是否有其他样式表代码覆盖了您的设置。另外,请确保您的ListWidget实际上需要水平滚动条。如果列表中的内容不超过容器的宽度,则不会显示水平滚动条。

可能是由于设置的样式表语法错误导致的。在你提供的代码中,width后面的单位应该是px而不是dpx,因此将代码改为如下形式应该可以解决问题:

this->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal { width: 60px; }");

如果仍然无法修改滑动条的宽度,可能需要考虑是否有其他样式表或者布局属性影响了滑动条的宽度。
如果对您有帮助,请给与采纳,谢谢。


    this->verticalScrollBar()->setStyleSheet("QScrollBar{width:10px;}"

你的代码有些问题,修改如下:

this->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal {width: 60px;}");

提供参考实例:https://www.it1352.com/2349655.html
【实例中主要讲述QListWidget 根据内容调整大小的方法】

该回答引用ChatGPT

在 C++ 中使用 setStyleSheet 函数修改 QScrollBar 的样式时,可能会出现样式不生效的情况。这可能是因为样式表中的语法错误导致的,或者是因为样式表的优先级低于其他样式表导致的。

对于您的代码,可能的原因是 width 属性的值写错了,应该是 60px 而不是 60dpx。请尝试将样式表中的 60dpx 改为 60px 并重新运行程序。

另外,如果修改样式表后仍然无法生效,可以尝试调整样式表的优先级。例如,您可以使用 QListWidget 的 setStyleSheet 函数来设置样式表,将 QScrollBar 的样式表设置为更高优先级,以确保样式表生效。以下是示例代码:


// 设置 QListWidget 样式表
this->setStyleSheet("QListWidget { background-color: white; }");

// 设置 QScrollBar 样式表
QString style = "QScrollBar:horizontal { width: 60px; }";
this->horizontalScrollBar()->setStyleSheet(style);
this->horizontalScrollBar()->setStyleSheet(style + this->horizontalScrollBar()->styleSheet());

在上面的代码中,我们首先使用 setStyleSheet 函数设置了 QListWidget 的样式表。然后,我们使用 setStyleSheet 函数设置了 QScrollBar 的样式表,并将其设置为更高优先级,以确保样式表生效。注意,我们使用 + 运算符将 QScrollBar 的样式表与当前样式表连接起来,以确保样式表的优先级更高。

您的代码中的问题在于单位的书写不正确,应该是60px而不是60dpx。正确的代码应该是:

this->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal {width: 60px;}");


另外,请注意在使用QSS时,属性名和值之间需要用冒号隔开,属性值之间需要用分号隔开。

由于ListWidget使用ListView包裹,因此在滑动块上没有可以调整的空间,ListWidget只可以使用ListView的默认设置,这就意味着刻线的宽度是不可更改的,其宽度将根据项目的数量而改变。