【发布时间】:2017-06-13 14:49:04
【问题描述】:
我想为QComboBox 和他的项目设置光标形状。 setCursor 仅影响 LineEdit 的一部分 QComboBox,如何访问项目视图以更改光标形状?
QComboBox *combo = new QComboBox();
combo->addItem("One");
combo->addItem("Two");
combo->addItem("Three");
combo->setCursor(Qt::PointingHandCursor); // changes cursor only for LineEdit part, on popup cursor is still arrow
combo->view()->setCursor(Qt::PointingHandCursor); // does not affect popup view
我们使用 Qt 5.5.1
【问题讨论】:
-
您是否尝试在 view()->viewport() 上进行设置,这是鼠标所在的实际小部件?也许视口会覆盖弹出窗口的光标。
-
@JohannesSchaub-litb 好主意,也许 view() 确实不是小部件,尝试使用
combo->view()->viewport()->setMouseTracking(true); combo->view()->viewport()->setCursor(Qt::PointingHandCursor);得到相同的结果。这很奇怪,因为我能够通过这样的样式表访问项目:QComboBox QAbstractItemView::item { color: red;}并弹出本身QComboBox QAbstractItemView {}。但是尝试更改光标形状时会遇到很多麻烦 -
@JohannesSchaub-litb 有趣的是,如果我在
combo->view()->viewport()上安装 eventFilter,我确实会收到所有 mouveMove 和 mouseHover 事件,但它无法为它安装光标combo->view()->viewport()->setCursor(Qt::PointingHandCursor);。
标签: c++ qt qt5 qcombobox qcursor