• 5257阅读
  • 1回复

[提问]QTableWidget中添加QWidget的问题(急!!!) [复制链接]

上一主题 下一主题
离线ichliebedich
 

只看楼主 倒序阅读 楼主  发表于: 2012-06-26
我在QTableWidget中添加自定义控件,点击自定义的控件时,QTableWidget并没有获得焦点,使用currentRow()或者currentColumn()得到的都是-1,如何能正确得到自定义控件在QTableWidget中的行列。

添加的QWidget直接用函数setCellWidget()添加的。
自定义控件继承QWidget。
离线842888299

只看该作者 1楼 发表于: 2013-03-28
解决方法:在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);
}
快速回复
限100 字节
 
上一个 下一个