【问题标题】:how to use QTable::editCell()如何使用 QTable::editCell()
【发布时间】:2012-07-06 00:33:42
【问题描述】:

我不明白应该如何使用 QTable::editCell()。我正在尝试根据my another question 中提到的用户在 QTable 中所做的条目进行一些错误检查。

我想让用户有机会重新编辑有错误的单元格。例如,如果名称列条目有一些特殊字符,例如“(”,则应提示用户输入错误,并且控件应在编辑模式下返回到同一单元格。我尝试在我的代码中使用 QTable::editCell()如下图。

Table->editCell(row, 0, TRUE);
name = Table->text(row, 0);

但是,这并没有按预期工作。控件根本不会留在单元格中,显然name 没有正确收集。所以,我的问题是如何在代码中确保可以编辑 QTable 的单元格,以便可以在下一条语句中立即访问编辑的内容(如上代码所示)。

注意:我只使用 qt 3.3.8。

【问题讨论】:

    标签: qt


    【解决方案1】:

    我认为你做不到。您必须返回事件循环,等待其中一个信号(如valueChanged(row,col))被触发以重新验证数据。

    GUI 对象上的阻塞等待通常不是一个好方法(模式对话框除外)。

    【讨论】:

    • 那么,editcell的标准用法是什么。因此,您似乎建议从单元格中获取值应该只从插槽中发生,而不是在 editCell 调用之后立即发生。
    • editCell "开始在行编辑单元格,col" 根据文档。它不会等待编辑完成 - 由信号通知。让editCell 等待任何事情都会在没有一些棘手的代码和/或线程的情况下阻塞事件循环,这是不可取的。您不应该“忙于等待”GUI 操作(除了预期会“冻结”主窗口的模式对话框的特殊情况。
    【解决方案2】:

    我知道我在这里有点晚了,但您应该使用以下连接语句和您自己的自定义函数来满足您的特定需求,如下所示。您还可以使用此方法禁止用户在您的自定义函数中输入特殊字符。这样他们就不必纠正不受欢迎的角色。

    connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(customFunction(int,int)));
    
    void updateTable
    {
        //remove invalid characters
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多