c++ - 如何根据近列单元格中的数据在 QTableView 的列内绘制不同的线?
问题描述
我想在列内画线,显示不同信号之间的可能连接(此外,我还想在它们上制作单选按钮以选择哪些连接处于活动状态)。
但是现在我遇到了麻烦,代表只允许我为所有列或所有行设置 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);
解决方案
您可能会考虑 QTableView 是否阻碍了您而不是帮助您。内置的小部件非常棒,但我经常发现,当我需要在它们专门设计的领域之外冒险时,我最终会花更多的时间在它们周围工作而不是从中受益。我不知道你在做什么的正确解决方案,但如果是我,我会探索基于 QAbstractItemView 编写我自己的视图,然后为整个事情做我自己的自定义绘画。
这样做的缺点是QTableView为你提供了很多交互支持,所以如果交互对你有很大的好处,那你也得自己写。所以这是一个权衡。QTableView 的内置交互也有可能妨碍您尝试执行的操作。它可以去任何一种方式。
推荐阅读
- azure - Azure Repos API 提交 - GetChanges 返回空列表
- javascript - 如何在 forEach 中获取索引?
- firebase - GatsbyJS with Firebase - WebpackError: ReferenceError: IDBIndex is not defined
- python - 如何在 Python 中使用字符串输入作为变量调用?
- javascript - 尝试在 JavaScript 中访问数组,结果未定义,不知道为什么
- javascript - 如何更改相对路径以指向服务器而不是本地主机?
- python - Python 调度表字符串变量
- json - 长列表的漂亮 json 格式
- r - 有没有办法通过 R 中的 K-Means 中的变量来计数/着色?
- javascript - 接受数组和数字的函数,如果在数组中找到,则返回数字的第一个索引