如果我点击它的子项,如何获取QTableWidget的当前行
How to get current row of QTableWidget if I clicked on its child?
我创建了一个QTableWidget
,其中使用了setCellWidget(QWidget*)
.我已经在单元格小部件中设置了QLineEdit
。我还创建了一个删除按钮,单击该按钮会向函数deleteRow
发送信号。我还使用了一个函数currentRow()
来获取当前行,但由于QLineEdit
,它返回-1
。代码片段如下。
void createTable() {
m_table = new QTableWidget(QDialog); //member variable
for (int i = 0; i < 3; i++)
{
QLineEdit *lineEdit = new QLineEdit(m_table);
m_table->setCellWidget(i, 0, lineEdit);
}
QPushButton *deleteBut = new QPushButton(QDiaolg);
connect(deleteBut, SIGNAL(clicked()), QDialog, SLOT(editRow()));
}
editRow() {
int row = m_table->currentRow(); // This gives -1
m_table->remove(row);
}
在上述情况下,我单击QLineEdit
,然后单击按钮删除。请帮我解决问题。
刚刚在这里尝试过,似乎在程序启动后立即单击按钮时,表currentRow
返回 -1,并且当第一次选择一个单元格,然后选择 QLineEdit 然后单击按钮时,返回正确的行。
我会执行以下操作作为解决方法:在 QLineEdit 中保存行号,例如使用 QObject::setProperty
:
QLineEdit *lineEdit = new QLineEdit(m_table);
lineEdit->setProperty("row", i);
m_table->setCellWidget(i, 0, lineEdit);
然后,在editRow
处理程序中,通过向 QTableWidget 请求其焦点子项来检索属性:
int row = m_table->currentRow();
if (row == -1) {
if (QWidget* focused = m_table->focusWidget()) {
row = focused->property("row").toInt();
}
}
如果在程序运行时删除行,则接受的解决方案将不起作用。因此,该方法需要更新所有属性。可以做到,如果这是一个罕见的操作。
我侥幸采用了一种迭代方法:
for(unsigned int i = 0; i < table->rowCount(); ++i)
{
if(table->cellWidget(i, relevantColumn) == QObject::sender())
{
return i;
}
}
return -1;
快速,肮脏,但有效,在我的情况下更合适,因为行经常被删除或更改其位置,只有小部件中的按钮连接到插槽,并且从未直接调用插槽。如果不满足这些条件,可能需要
进一步检查(if(QObject::sender()) { /* */ }
,...)。
只有每次删除一行时重新计算 QLineEdit 的属性,Karsten 的答案才能正常工作,这可能是很多工作。而阿空加瓜的答案只有在通过信号/插槽机制调用该方法时才有效。在我的解决方案中,我只计算具有焦点的QlineEdit的位置(假设所有表项都使用setCellWidget设置):
int getCurrentRow() {
for (int i=0; i<myTable->rowCount(); i++)
for (int j=0; j<myTable->columnCount(); j++) {
if (myTable->cellWidget(i,j) == myTable->focusWidget()) {
return i;
}
}
return -1;
}
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在qtablewidget中获取字符串的行号
- qtableWidget获取垂直标头标签
- 如果我点击它的子项,如何获取QTableWidget的当前行
- 如何获取QTableWidget列标签值
- 从 Qtabewidgetitem 中更改的文本获取文本 qtablewidget
- 按列进行排序后,如何从qtablewidget :: item(qt bug?)中获取正确的行
- 通过单击垂直标题获取QTableWidget的行索引
- QTableWidget复选框获取状态和位置
- 如何从QTableWidget::setCellWidget()中获取文本
- Qt:从QTableWidget中的按钮获取文本
- 在QTableWidget中获取QCheckBox的单元格位置
- QTableWidget项获取Widget类型并访问它