QTableWidget QTableView 选中虚框问题

原址:http://stackoverflow.com/questions/2055705/hide-the-border-of-the-selected-cell-in-qtablewidget-in-pyqt



3
down vote accepted

It looks like this dotted border around selected cell you're trying to hide is a focus rectangle. Any given cell can have focus and not be selected at the same time and vice-versa. If you want this border to not get painted use an item delegate. There you can remove State_HasFocus style from the item's state before painting it. Pls, see an example below on how to do this, it's c++, let me know if you have troubles converting it to python

// custom item delegate class
class NoFocusDelegate : public QStyledItemDelegate
{
protected:
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
};

void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
{
    QStyleOptionViewItem itemOption(option);
    if (itemOption.state & QStyle::State_HasFocus)
        itemOption.state = itemOption.state ^ QStyle::State_HasFocus;
    QStyledItemDelegate::paint(painter, itemOption, index);
}
...
// set the item delegate to your table widget
ui->tableView->setItemDelegate(new NoFocusDelegate());

`QTableView` 是 Qt 库中的一个用于显示表格数据的组件。默认情况下,当用户选择某个单元格时,会有一条虚线框显示选中区域。若想移除这一效果,可以通过修改 `QTableView` 的样式表 (style sheet) 来达到目的。 以下是通过设置样式表来移除选中项虚线框的步骤: ### 步骤 1: 获取 QTableView 实例 首先,你需要有一个 `QTableView` 实例。假设这个实例已经存在于你的界面中,并命名为 `tableView`。 ```cpp QTableView *tableView = // ... 初始化你的 QTableView 代码 ``` ### 步骤 2: 设置样式表 接着,你可以通过以下代码设置样式表来移除虚线框: ```cpp QString styleSheet = "QTableView::item:selected { border: none; }"; tableView->setStyleSheet(styleSheet); ``` 在这个样式表中,我们使用了 CSS 类型的选择符 `QTableView::item:selected`。这里的 `::` 表示这是一个内部选择符,它指定的是特定元素的子元素。在此处,`::item` 指定了 `QTableView` 中的每个项目 (`QTableWidget::item`) 被选择时的行为。然后我们设置了边框属性 `border` 为空字符串 `""`,以此来移除被选择项的边框。 ### 步骤 3: 确保样式有效应用 为了确保你的样式改变能立即生效并应用到所有后续的操作上,你可以在应用或者重绘视图的时候直接设置样式表。如果需要在运行时动态更新,可以考虑在信号槽连接中完成此操作,例如 `tableView->selectionChanged()` 信号。 ### 相关问题: 1. **如何自定义 QTableView 的行高和列宽?** - 可以通过设置 `horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch)` 和 `verticalHeader()->setDefaultSectionSize(高度值)` 来调整宽度和行高。 2. **QTableView 如何添加垂直滚动条?** - 默认情况下,`QTableView` 就有垂直滚动条。若未自动出现,可以检查控件布局是否限制其可见性,或者代码中是否存在错误导致其未正常加载。 3. **如何禁用 QTableView 的编辑功能?** - 通过设置 `tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);` 来关闭编辑触发机制即可。 通过上述方法,你可以有效地控制 `QTableView` 的外观,包括移除选中项的虚线框。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值