Я хочу нарисовать линии внутри столбца, которые показывают возможные соединения между различными сигналами (Кроме того, я также хочу сделать радиокнопки на них, чтобы выбрать, какие соединения активны).
Но теперь у меня проблема с тем, что делегаты позволяют мне устанавливать SetItemDelegate только для всех столбцов или всех строк. Поэтому я не могу просто сделать разные блоки этих линий, такие как вертикальная линия, угловые линии, горизонтальная линия, а затем нарисовать их в зависимости от данных в ячейках. Я приложил пример изображения. Что я должен использовать, чтобы нарисовать что-то вроде этого?
Что-то вроде:
Определить новый стиль, переопределить метод drawPrimitive и выполнить произвольное рисование?
Не могли бы вы показать мне пример, пожалуйста?
Линиипример

Что у меня сейчас есть

Мой основной код для создания строк с сигналами (я их беру. TXT-файл для моделирования на данный момент):
int IPFilesize = IPfilespl.size();
ui->CompTab->setRowCount(IPFilesize);
for (int i = 0; i<IPFilesize; i++)
{
QWidget *ChBx = new QWidget();
QCheckBox *pCheckBox = new QCheckBox();
QHBoxLayout *pLayout = new QHBoxLayout(ChBx);
pLayout->addWidget(pCheckBox);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0,0,0,0);
ChBx->setLayout(pLayout);
ui->CompTab->setCellWidget(i, 0, ChBx);
//connect(ChBx,SIGNAL(clicked()),this,SLOT(checkboxClicked()));
}
for (int ii = 0; ii<IPFilesize; ii++)
{
ui->CompTab->setItem(ii, 2, new QTableWidgetItem(IPfilespl.at(ii)) );
//connect(ChBx,SIGNAL(clicked()),this,SLOT(checkboxClicked()));
}
ui->CompTab->setItemDelegateForColumn(1, new WireDelegateDown());
Код заголовка
class WireDelegate: public QStyledItemDelegate { protected: void paint(QPainter* painter, const QStyleOptionViewItem& opt, const QModelIndex& index) const {
int x = opt.rect.x();
double y = opt.rect.y();
QPoint c = opt.rect.center();
double centerx = c.x();
double centery = c.y();
double r = opt.rect.right();
double width = opt.rect.width();
double height = opt.rect.height();
QPainterPath path;
path.addRect(centerx, centery-height/2, 5.0, height/2);
path.moveTo(0, 0);
path.addRect(centerx, centery, width/2, 5.0);
path = path.simplified();
painter->drawPath(path);