Выравнивание проверяемых элементов в qTableWidget

В tableWidget у меня есть один столбец, полностью состоящий из проверяемых элементов. Я не могу понять, как сосредоточить флажок или, по крайней мере, удалить текстовое поле рядом с ним. Как вы можете видеть на этой картинке введите описание изображения здесь текстовое окно имеет эту уродливую схему, когда я нажимаю на ячейку, я бы хотел, чтобы она была отключена во всей таблице, если это возможно. Я прочитал, что мне нужно использовать делегатов для управления позиционированием элементов / значков, но для nooby, подобных мне, потребуется слишком много времени, чтобы понять это правильно, поэтому, если есть какое-то простое решение, которое сделает этот столбец менее уродливым, пожалуйста, примеры будут оценены.

3 Solutions collect form web for “Выравнивание проверяемых элементов в qTableWidget”

Этот прямоугольник является перекрестком фокуса и не может быть скрыт через таблицу стилей .

Изменить: у вас есть четыре варианта:

1 – Кажется, что вы можете использовать

tablewidget->setFocusPolicy(Qt::NoFocus); 

Но вы потеряете способность обрабатывать события клавиатуры. См. FocusPolicy

2 – Установите проверяемые элементы виджета как отключенные, а не выбираемые через setFlags . Я не знаю, является ли это ошибкой, но в моем Qt я буду продолжать использовать флажки

3 – Установите первый столбец так же, как checkable, хотя setFlags тоже, и просто не используйте этот второй столбец. Флажки будут показаны в том же столбце, что строки, но слева.

4- Этот пользовательский делегат, который вы не хотите создавать.

И вы получили здесь пример

Пример, который работал с использованием pyqt4. Адаптировано из falsinsoft

qcheck box center внутри pyqt4 atble widget

 table = QTableWidget() cell_widget = QWidget() chk_bx = QCheckBox() chk_bx.setCheckState(Qt.Checked) lay_out = QHBoxLayout(cell_widget) lay_out.addWidget(chk_bx) lay_out.setAlignment(Qt.AlignCenter) lay_out.setContentsMargins(0,0,0,0) cell_widget.setLayout(lay_out) tableWidget.setCellWidget(i, 0, cell_widget) 

Применение:

 pView->setItemDelegateForColumn( 1, new DELEGATE::CheckBoxDelegate( this ) ); 

CheckBoxDelegate.h

 #ifndef CHECKBOXDELEGATE_H #define CHECKBOXDELEGATE_H #include <QStyledItemDelegate> #include <QModelIndex> namespace DELEGATE { class CheckBoxDelegate : public QStyledItemDelegate { Q_OBJECT public: CheckBoxDelegate( QObject *parent ); ~CheckBoxDelegate(); void paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const; bool editorEvent( QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index ); private: QModelIndex m_lastClickedIndex; }; } #endif // CHECKBOXDELEGATE_H 

CheckBoxDelegate.cpp

 #include "CheckBoxDelegate.h" #include <QApplication> #include <QStyleOptionButton> #include <QPainter> #include <QEvent> #include <QMouseEvent> namespace DELEGATE { CheckBoxDelegate::CheckBoxDelegate( QObject *parent ) : QStyledItemDelegate( parent ) { } CheckBoxDelegate::~CheckBoxDelegate() { } void CheckBoxDelegate::paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const { // Setting parameters Qt::CheckState state = (Qt::CheckState)index.data( Qt::CheckStateRole ).toInt(); QStyleOptionButton opt; opt.state = QStyle::State_Enabled; // CheckBox enabled if ( option.state & QStyle::State_MouseOver ) opt.state |= QStyle::State_MouseOver; // Mouse over sell switch ( state ) // Check box state { case Qt::Unchecked: opt.state |= QStyle::State_Off; break; case Qt::PartiallyChecked: opt.state |= QStyle::State_NoChange; break; case Qt::Checked: opt.state |= QStyle::State_On; break; } // Check box rect opt.rect = QApplication::style()->subElementRect( QStyle::SE_CheckBoxIndicator, &opt, NULL ); const int x = option.rect.center().x() - opt.rect.width() / 2; const int y = option.rect.center().y() - opt.rect.height() / 2; opt.rect.moveTo( x, y ); // Optional: draw hover focus if ( option.state & QStyle::State_MouseOver ) painter->fillRect( option.rect, QBrush( QColor( 0xff, 0xff, 0xaa, 0x60 ) ) ); // Mandatory: drawing check box QApplication::style()->drawControl( QStyle::CE_CheckBox, &opt, painter ); } bool CheckBoxDelegate::editorEvent( QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index ) { switch ( event->type() ) { case QEvent::MouseButtonPress: m_lastClickedIndex = index; break; case QEvent::MouseButtonRelease: { if ( index != m_lastClickedIndex ) break; QMouseEvent *e = static_cast< QMouseEvent * >( event ); if ( e->button() != Qt::LeftButton ) break; m_lastClickedIndex = QModelIndex(); QStyleOptionButton opt; opt.rect = QApplication::style()->subElementRect( QStyle::SE_CheckBoxIndicator, &opt, NULL ); const int x = option.rect.center().x() - opt.rect.width() / 2; const int y = option.rect.center().y() - opt.rect.height() / 2; opt.rect.moveTo( x, y ); if ( opt.rect.contains( e->pos() ) ) { // TODO: process click on checkbox logic Qt::CheckState state = (Qt::CheckState)index.data( Qt::CheckStateRole ).toInt(); switch ( state ) { case Qt::Unchecked: state = Qt::PartiallyChecked; break; case Qt::PartiallyChecked: state = Qt::Checked; break; case Qt::Checked: state = Qt::Unchecked; break; } model->setData( index, state, Qt::CheckStateRole ); } return true; } default: break; } return QAbstractItemDelegate::editorEvent( event, model, option, index ); } } 

Образец:

образец

Улучшение объектов:

  • Выбор чертежа
  • Обработка наведения мыши
  • Обработка двойного щелчка
  • События редактирования клавиатуры // есть много примеров в google, stackoverflow

Примечание. Ваша модель должна обрабатывать метод setData для роли Qt :: CheckStateRole.

  • Анимация с использованием pixmap или последовательности изображений в Python с QT4
  • QTabWidget с CheckBox в заголовке
  • Как перенести файл в корзину / мусор на разных платформах с помощью PyQt4?
  • PyQt, нажмите действие на Qwidget
  • Как связать горизонтальную полосу прокрутки с несколькими групповыми группами.?
  • QWizard: изменение высоты / размеров поля заголовка
  • Как изменить размер QMainWindow после удаления всех DockWidgets?
  • Qt4 + mplot3d of matplotlib
  • получение клавиатурных событий с pyqt
  • Python - PyQt4 (Webkit) Как установить значение ввода (type = "file" multiple = "")?
  • Как установить Qt-документацию для демонстрационных и Qt-инструментов PyQt
  •  
    Interesting Posts for Van-Lav

    SqlAlchemy выберите с max, group_by и order_by

    Google API возвращает invalid_grant в производство, но не локально

    Невозможно определить тип файла

    Как написать фильтр нижних частот для дискретизированного сигнала в Python?

    Дата и время Python для данных в Matlab

    Запись CSV Panda – добавление против записи

    Составление списка с помощью аккумулятора

    Получить список ключей кэша в Django

    Поиск всех вхождений чередующихся цифр с использованием регулярных выражений

    Django admin – Как добавить знак «зеленый плюс» для поля «Множество ко многим» в пользовательской форме администратора

    для цикла: C ++ и python

    Создание XML-документа с помощью BeautifulSoup

    Как разобрать строку, представляющую вложенный список, в фактический список?

    matplotlib: метки периода центрирования по данным периода в графике временного ряда

    Можете ли вы зарегистрировать несколько ModelAdmins для модели? Альтернативы?

    Python - лучший язык программирования в мире.