Mac上的选定对象显示背景突出显示而不是边界矩形突出显示

时间:2014-09-17 22:47:30

标签: c++ macos qt listview

我有一个Qt应用程序,我正在移植到mac。

在IconMode中的QListView或QTableView中显示了一些对象(图像),当选中时,在Windows和Linux中会突出显示(一个包含对象的矩形,有彩色背景 - 如果选中该项目,则为灰色但不焦点,如果项目具有焦点则为浅蓝色;如果选择了项目并且具有焦点,则略微更强烈的蓝色 - 这可能是基于所选颜色方案的默认选择行为。

在Mac上,唯一显示的是对象下面的一个小点,如果视图中的对象是透明的,则浅蓝色显示在对象内部 - 但没有选择矩形。如果对象具有焦点,则没有任何变化,如果对象不透明,则只显示对象下的小点。

在画布上移动对象后,mac会根据需要在边界矩形上显示选择,仅在listview和tableview内部显示边界矩形。

使用Designer创建表单...检查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上,仍然被忽略。我还没有看到任何其他背景名称。我也尝试用小写字母。

1 个答案:

答案 0 :(得分:0)

我最终使用样式表 - 就像我的问题更新一样 - 使用osx蓝色主题的硬编码颜色值。