qt combox 表格;表格中数据可输入

表格中含有COMBOX,如何使QT中的combox选项中的值被选中后该行上其他位置处的数值自动被填进表格内??而且要求选中后该行上的数据是可改变输入的。求详细代码

3个回答

可以使用model/view框架,修改数据用delegate

都有现成的类,没有合适的可以继承他现有的再自己实现。
模型类QAbstractItemModel: 链表模型QAbstractListModel 表格模型QAbstractTableModel 标准模型QAbstandModel
视图类QAbstractItemView: QListView QTableView QTreeView ...
委托类QItemDelegate
这是我代码中的一段,继承QItemDelegate的一个类的实现,仅供参考 希望对你有帮助。
ValDelegate::ValDelegate(int Column,QObject *parent) :
QItemDelegate(parent)
{
this->Column = Column;
}

QWidget* ValDelegate::createEditor(QWidget parent,
const QStyleOptionViewItem &option,const QModelIndex &index) const
{
if(index.column()%2)
{
int secs = index.model()->data(index, Qt::DisplayRole).toInt();
QSpinBox
box = new QSpinBox(parent);
box->setMaximum(99999);
box->setMinimum(0);
box->setAlignment(Qt::AlignHCenter);
box->setValue((short)secs);
connect(box, SIGNAL(editingFinished()),this, SLOT(CommitAndCloseEditor()));
return box;
}
else
return QItemDelegate::createEditor(parent, option, index);
}

void ValDelegate::setEditorData(QWidget editor, const QModelIndex &index) const
{
if (index.column()%2)
{
int secs = index.model()->data(index, Qt::DisplayRole).toInt();
QSpinBox
box = qobject_cast(editor);
box->resize(100,30);
QPoint pos = box->pos();
//pos.setX(pos.rx()+10);
pos.setY(pos.ry()+5);
box->move(pos);
box->setValue((short)secs);
}
else
QItemDelegate::setEditorData(editor, index);
}

void ValDelegate::setModelData(QWidget editor, QAbstractItemModel model,
const QModelIndex &index) const
{
if (index.column()%2)
{
QSpinBox* box = qobject_cast(editor);
short secs = (short)box->value();

    ((YcModel*)model)->setData(index, secs);

}
else
    QItemDelegate::setModelData(editor, model, index);

}

void ValDelegate::CommitAndCloseEditor()
{
QSpinBox* box = qobject_cast(sender());

emit commitData(box);
emit closeEditor(box);

}


谢谢您的回答,我初学,还是有些看不懂,我想知道combox选项中的内容怎么和后续表格中的数据关联起来?

model、view和delegate 之间大概的关系就是这样
图片说明
当修改你数据结构的时候,model中的数据会自动修改,View显示的数据也随之更改,当通过delegate修改view中的数据时model中的也随之更改
下面是我的项目中的代码,这个网页的代码片看代码很不爽,我就直接截图吧
图片说明
新建一个model 和 delegate
将model与我的链表绑定
tableView是UI中建立的,将tableView与delegate绑定
将tableView与model绑定

CSDN_logo
沉西乐恩 回复crystal0075: QQ号 私信你了
5 年多之前 回复
CSDN_logo
沉西乐恩 回复crystal0075: 不用客气,我也是略懂,不过可以互相讨论
5 年多之前 回复
S314050075
crystal0075 您方不方便给我QQ或者邮箱什么的,我需要学的太多了,望多向您请教。
5 年多之前 回复
S314050075
crystal0075 谢谢您的回答,您给我了方向,但是这方面的我确实得重头学,哎,时间不多了,我老师只给我一个礼拜时间做出来。
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐