将 QTableWidget 单元格的边框设置为 0 像素。

8
我该如何将QTableWidget中的单元格边框设置为0px?最好能够选择哪些边的单元格边框设置为0,但如果所有边框都设置为0也可以。编辑:将边框设置为0px或将颜色设置为白色都可以。
3个回答

14
您可以使用 QTableWidget::setShowGrid 禁用所有边框,然后通过样式表重新启用其中的一些(例如: "QTableView::item { border-left: 1px solid black; }")。 后者是单元格内部边框,因此与网格对齐可能不那么好。
如果您想为每个单元格单独更改边框,则需要编写一个委托(就像在这个答案中所示)。

10

检查一下QTableWidget的setShowGrid属性是否适合你的需求,类似于这样:

tableWidget->setShowGrid(false);

希望这可以帮到你,祝好!


0

对我来说,最简单的方法是创建以下自定义委托并将其安装到表格中,而不影响小部件的焦点策略并使用qss:

*.h:

class FocusControlDelegate : public QStyledItemDelegate {
    public:
        FocusControlDelegate(QObject *parent = 0);
        virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const;        
        void setFocusBorderEnabled(bool enabled);

    protected:
        bool f_focus_border_enabled;
    };

*.cpp:

FocusControlDelegate::FocusControlDelegate(QObject *parent) : QStyledItemDelegate(parent) {
    f_focus_border_enabled = false;
}

void FocusControlDelegate::setFocusBorderEnabled(bool enabled) {
    f_focus_border_enabled = enabled;
}

void FocusControlDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const {
    QStyledItemDelegate::initStyleOption(option, index);
    if(!f_focus_border_enabled && option->state & QStyle::State_HasFocus)
        option->state = option->state & ~QStyle::State_HasFocus;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接