Установите границы ячейки QTableWidget в 0px

Как установить границы ячеек в QTableWidget в 0px? Предпочтительно я могу выбрать, какие стороны границы ячейки установить в 0, но я могу жить с установкой их всех в 0.

EDIT: либо установка границы в 0px, либо установка цвета в белый также будет хорошо.

3 ответов


Вы можете отключить все границы с QTableWidget::setShowGrid, и включить некоторые из них в таблице стилей (например: "QTableView::item { border-left: 1px solid black; }")

последние являются внутренними границами ячеек, поэтому они могут быть не так выровнены, как сетка.

Если вы хотите изменить границы отдельно для каждой ячейки, вам нужно написать делегат (например, в что ответ).


проверьте, если QTableWidget это setShowGrid будет работать для вас, smth, как это:

tableWidget->setShowGrid(false);

надеюсь, это поможет, с уважением


самый простой способ сделать это для меня, не влияя на политику фокусировки виджета и используя 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;
}