【问题标题】:Making QTableWidget editable row by row like with MS access使 QTableWidget 可以像 MS 访问一样逐行编辑
【发布时间】:2013-09-26 18:09:29
【问题描述】:

我对 QTableWidget 进行了子类化以添加一些功能。我也使用了myQTableWidgetSubclass->setRowCount(10); 方法。

问题是表格不可编辑。目标是允许用户逐行编辑,例如首先是第一行,当它准备好时(即用户填写必要的数据),然后是第二行,等等。

我需要与“MS 访问表”类似的功能

【问题讨论】:

    标签: c++ qt qtgui qtablewidget


    【解决方案1】:

    理论上,这很简单,但人们不会从头开始为你编写代码。

    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(...);
        // ...
    }
    

    【讨论】:

    • 所以,如果我理解得很好,我将为第一行插入可编辑项,当用户用数据填充整个行时,我将为下一行插入可编辑项!!
    • @advseo32:是的,但必须如此。您可以在表格中填写多行,但只有第一行是可编辑的项目,然后根据您的自定义逻辑开始切换可编辑标志。
    • 我已经使用了这个代码但不能正常工作 for(int row=0; row tableWidget->rowCount(); row++) { for (int col=0; col tableWidget->columnCount(); col++) { QTableWidgetItem *item = NULL; if(row!= 0) { item = new QTableWidgetItem; item->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled); ui->tableWidget->setItem(0,col,item); }else{ item = new QTableWidgetItem; item->setFlags(item->flags() & ~Qt::ItemIsEditable); ui->tableWidget->setItem(0,col,item); }}}
    • 请勿在评论中粘贴此类代码。此外,您的抽象问题已得到解答。当你得到答案时,不要改变范围。打开一个新问题...人们花时间回答问题,然后改变范围是不公平的。
    • 没问题,但主要问题是您创建新项目而不是查询表格小部件的现有项目。您需要查询这些,并根据您的逻辑在其上设置标志。
    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多