【发布时间】:2013-09-26 18:09:29
【问题描述】:
我对 QTableWidget 进行了子类化以添加一些功能。我也使用了myQTableWidgetSubclass->setRowCount(10); 方法。
问题是表格不可编辑。目标是允许用户逐行编辑,例如首先是第一行,当它准备好时(即用户填写必要的数据),然后是第二行,等等。
我需要与“MS 访问表”类似的功能
【问题讨论】:
标签: c++ qt qtgui qtablewidget
我对 QTableWidget 进行了子类化以添加一些功能。我也使用了myQTableWidgetSubclass->setRowCount(10); 方法。
问题是表格不可编辑。目标是允许用户逐行编辑,例如首先是第一行,当它准备好时(即用户填写必要的数据),然后是第二行,等等。
我需要与“MS 访问表”类似的功能
【问题讨论】:
标签: c++ qt qtgui qtablewidget
理论上,这很简单,但人们不会从头开始为你编写代码。
1) 您需要使用void QTableWidgetItem::setFlags(Qt::ItemFlags flags) 使项目可编辑和不可编辑。您可以根据需要对每个项目使用此方法。
参见Qt::ItemFlags的文档中的以下枚举值描述:
Qt::ItemIsEditable 2 可以编辑。
2) 完成后,您需要将自定义插槽连接到刚刚编辑的项目的相应信号。然后,您的插槽将分别重新排列单元格的可编辑功能。
以下是您可能感兴趣的相关信号:
* void QTableWidget::cellChanged(int row, int column) [signal]
* void QTableWidget::currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) [signal]
* void QTableWidget::currentItemChanged(QTableWidgetItem * current, QTableWidgetItem * previous) [signal]
* void QTableWidget::itemChanged(QTableWidgetItem * item) [signal]
然后,您将需要这样的东西:
connect(myQTableWidgetSubclass, SIGNAL(selectedSignalFromAbove), this, SLOT(mySlotInTheClass));
// ...
void MyClass::mySlotInTheClass(...)
{
// ...
myTableWidgetItemX.setFlags(...);
// ...
}
【讨论】: