QComboBox QAbstractItemView::item{} 没有效果是为什么?
时间: 2024-05-25 18:14:09 浏览: 230
可能是因为你没有正确设置 QComboBox 的 model。QComboBox 会使用 model 中的数据来填充下拉列表中的选项。如果 model 中没有数据,或者数据无法正确显示,那么 QComboBox 的 item 就无法正常工作。
你可以尝试使用 setModel() 方法来为 QComboBox 设置 model,并确保 model 中有正确的数据。如果问题仍然存在,可以提供更多的代码或上下文信息以帮助我们更好地理解问题。
相关问题
this->setStyleSheet("QComboBox { height: 30px; width: 45px;}" "QComboBox QAbstractItemView::item { height: 30px; width: 45px; }" "QCheckBox::indicator {width: 60px; height: 60px;}" ); setStyleSheet("QToolButton:checked{background-color: qlineargradient(x1: 0, y1: 0.1, x2: 1, y2: 0, stop: 0 rgba(172, 172, 172, 255), stop: 1 rgba(255, 255, 255, 255));color: rgb(0, 0, 0);}");这个代码会使第一句代码失效吗
这个代码会使第一句代码失效,因为第二句代码中使用了 `setStyleSheet` 函数,会覆盖之前设置的样式表。如果需要在一个 `QWidget` 中设置多个样式表,可以将多个样式表合并成一个字符串,然后在一次性地使用 `setStyleSheet` 函数设置。例如:
```
QString styleSheet = "QComboBox { height: 30px; width: 45px;}"
"QComboBox QAbstractItemView::item { height: 30px; width: 45px; }"
"QCheckBox::indicator {width: 60px; height: 60px;}"
"QToolButton:checked{background-color: qlineargradient(x1: 0, y1: 0.1, x2: 1, y2: 0, stop: 0 rgba(172, 172, 172, 255), stop: 1 rgba(255, 255, 255, 255));color: rgb(0, 0, 0);}";
setStyleSheet(styleSheet);
```
QT QComboBox得到鼠标光标事件是什么?
如果您想要获取`QComboBox`中鼠标光标的位置,可以通过`QComboBox`的`view()`函数获取下拉框的`QAbstractItemView`对象,然后再通过`QAbstractItemView`的`mapFromGlobal()`函数将全局坐标转换为视图坐标,最后再通过视图坐标获取光标所在的项的索引。
具体实现过程如下:
```cpp
void MyComboBox::mouseMoveEvent(QMouseEvent *event)
{
QPoint pos = event->globalPos(); // 获取鼠标位置
QAbstractItemView *view = this->view(); // 获取下拉框的视图对象
QModelIndex index = view->indexAt(view->mapFromGlobal(pos)); // 将全局坐标转换为视图坐标,并获取所在项的索引
if (index.isValid()) {
// 如果索引有效,则表示光标在某个项上
qDebug() << "Mouse cursor is over item:" << index.row();
} else {
// 如果索引无效,则表示光标在下拉框的非项区域
qDebug() << "Mouse cursor is over non-item area.";
}
}
```
在该函数中,我们首先通过`event->globalPos()`获取鼠标在屏幕上的全局坐标,然后通过`this->view()`获取下拉框的视图对象,接着通过`QAbstractItemView`的`mapFromGlobal()`函数将全局坐标转换为视图坐标,最后通过视图坐标获取光标所在的项的索引。需要注意的是,如果索引无效,则表示光标在下拉框的非项区域。
阅读全文