【问题标题】:How to disable selection highlighting in a QTableWidget如何在 QTableWidget 中禁用选择突出显示
【发布时间】:2014-09-18 08:23:56
【问题描述】:

我有一个禁用 setSelectionMode (QTableWidget::NoSelection) 的 QTableWidget,而我填写的 QTableWidgetItems 没有 Qt::ItemIsEditable 标志。

尽管如此,一个被点击的单元格会得到某种光标(在我的例子中是底部的黑线):

如何禁用此“光标”?

【问题讨论】:

  • 确保清除Qt::ItemIsSelectable标志。
  • 我得到与 Qt::ItemIsSelectable 删除相同的结果...

标签: python c++ qt qt4 qtablewidget


【解决方案1】:

这有帮助吗?

QPalette palette = tableWidget->palette();
palette.setBrush(QPalette::Highlight,QBrush(Qt::white));
palette.setBrush(QPalette::HighlightedText,QBrush(Qt::black));
tableWidget->setPalette(palette);

稍微详细一点: 项目的外观由视图的调色板控制,您可以使用TableWidget::palette() 方法检索该调色板。请注意,它返回为const,因此您有一个副本,更改它,然后使用setPalette 应用它。另请注意,这里我只是将单元格颜色设置为白色,将文本颜色设置为黑色,理想情况下,您可以将其专门设置为默认单元格颜色(也可以从调色板中获得)。最后请注意,在我的情况下,该项目仍然保留了与我没有尝试在此处解决的默认边界不同的边界。

您可以阅读有关各种颜色定义的更多详细信息,例如这里(对于 Qt 4.8)http://qt-project.org/doc/qt-4.8/qpalette.html#ColorRole-enum

编辑:再筛选一下,您似乎应该通过设置整个小部件的焦点策略来消除小部件周围的任何边框,方法是像这样设置整个小部件的交互(而不是选择):

tableWidget->setFocusPolicy(Qt::NoFocus);

如果这不起作用,那么我的想法很快就会用完。

【讨论】:

  • 我仍然得到这个黑色底线......
  • @TobiasLeupold 我又找到了一条线索并将其添加到答案中。正如我在那里所说,如果这没有帮助,我就没有想法了。
  • 另一个补充:似乎这个线程得出了相同的结论:stackoverflow.com/questions/2055705/… 但需要注意的是,使用Qt::NoFocus 会失去使用键盘导航的能力,这可能会也可能不会给你一个问题
  • palette.setBrush(QPalette::Highlight, palette.brush(QPalette::Base)); palette.setBrush(QPalette::HighlightedText, palette.brush(QPalette::Text));
【解决方案2】:
#include <QTableWidget>



tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
tableWidget->setFocusPolicy(Qt::NoFocus);
tableWidget->setSelectionMode(QAbstractItemView::NoSelection);

这些语句将禁用单元格中的表格选择..

【讨论】:

    【解决方案3】:

    以下解决方案对我有用:

    tableWidget->setFocusPolicy(Qt::NoFocus);
    

    但问题是,你不能使用键盘在QTableWidget上上下移动。

    所以我认为这个解决方案不好。

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 1970-01-01
      • 2011-05-20
      • 2014-11-06
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多