【发布时间】:2014-11-12 03:20:35
【问题描述】:
我有一个要移植到 mac 的 Qt 应用程序。
QListView 或 QTableView 中的 IconMode 中显示了一些对象(图像),当被选中时,在 Windows 和 Linux 中会突出显示(一个包含对象的矩形,具有彩色背景 - 如果项目被选中但没有被选中,则为灰色焦点,如果项目具有焦点,则为浅蓝色,如果项目被选中并具有焦点,则蓝色稍微更强烈 - 这可能是选择的默认行为,基于选定的配色方案)。
在 mac 上,唯一显示的是对象下方的一个小点,如果视图中的对象是透明的,则对象内部会显示浅蓝色 - 但没有选择矩形。如果对象有焦点,则没有任何变化,如果对象不透明,则仅显示对象下方的小点。
一旦对象在画布上移动,mac 会根据需要在边界矩形上显示选择,只有在 listview 和 tableview 内边界矩形是不可见的。
表单是使用设计器创建的... listView 属性QListView.selectionRectVisible 已选中。
我看不出是什么导致了这种情况发生......但我已经尝试过
#if defined (Q_OS_MACX)
m_ui->lv1->setAttribute(Qt::WA_MacShowFocusRect, true);
m_ui->lv1->UseCustomSelectionColors(true); // documentation shows this but it doesn't build
m_ui->lv1->setSelectionRectVisible(true);
#endif
对于mac,并没有什么区别。
我还能尝试什么来显示对象的选择?
Qt 4.8
编辑:找到了一个站点,其中包含tiled list view 的示例...除此之外,它在所选项目周围绘制了一个可见的矩形...
这似乎是一种非常复杂的方法来做一些似乎已经实现的事情 - 突出显示选定的对象 - 如果必须的话我会这样做,但我希望我不必为 mac 添加太复杂的东西版本,不会在任何其他平台上使用...
必须有一种方法使用 listview 和 tableview 的普通属性和方法来确保边界矩形的背景,而不仅仅是项目的背景,在进行选择时显示?
不知道这是不是典型的mac行为……
更新
虽然我真的尽量不覆盖期望的默认系统行为,但我尝试强制列表行为...
#if defined (Q_OS_MACX)
QString stylesheet = "";
stylesheet += "QListView::item:selected:active:hover{background-color:red;}";
stylesheet += "QListView::item:selected:active:!hover{background-color:blue;}";
stylesheet += "QListView::item:selected:!active{background-color:yellow;}";
stylesheet += "QListView::item:!selected:hover{background-color:green;}";
setStyleSheet(stylesheet);
#endif
问题是,我需要系统颜色,我无法定义自己的颜色,因为它们与应用程序窗口的其余部分不匹配......
悬停、选择(强)、选择(但没有焦点)、选择(但未激活)的系统颜色名称是什么?
我尝试过使用
stylesheet += "QListView::item:selected:active:hover{background-color:Highlight;}";
在 Windows 中,这看起来没问题 - 因为它可能无法识别,因此被忽略...在 mac 上,仍然被忽略。而且我还没有看到任何其他背景名称。我也试过小写。
【问题讨论】:
-
您是否考虑将 Qt 样式表作为选项?我相信,可以在样式表中为 mac 平台指定特定的选择颜色。
-
@N1ghtLight - 我已更新尝试使用样式表,但没有成功