解决方法:在button的slot函数中,从sender得到button指针,根据这个button的位置(x,y),由tablewidget->itemAt(x,y)可得到modelndex,其中itemAt不受scroll影响.用这个方法的好处是,从modelindex开始,能完全操作tablewidget. 由ModelIndex,来获取按钮button所在QTableWidget的行列数。
void OPOSWidget::slotAddApp()
{
QPushButton *pbt = dynamic_cast<QPushButton*>(this->sender());
if(pbt == 0)
return;
int x = pbt->frameGeometry().x();
int y = pbt->frameGeometry().y();
QModelIndex index = ui->Application->indexAt(QPoint(x,y));
int row = index.row();
//int column = index.column();
if(row == -1/* || column == -1*/)
return;
ui->Application->cellWidget(row,5)->setDisabled(true);
ui->Application->cellWidget(row,5)->setDisabled(false);
QString fileName = QFileDialog::getOpenFileName(this,tr("Open..."),"",tr("Compressed Files(*.zip);;Compressed Files(*.rar)"));
if(fileName.isEmpty())
{
return;
}
m_Applist->addItem(fileName);
}