【问题标题】:Qt::QTableWidget->setRowCount(0) crashes the application in release build?Qt::QTableWidget->setRowCount(0) 在发布版本中使应用程序崩溃?
【发布时间】:2015-01-13 10:13:33
【问题描述】:

我有一个 3 列和 1000 行的 QTableWidget(取决于从数据库中获取的项目的数量)。

我还有一个“重新加载”按钮来重新加载数据库中的所有项目。

“重新加载”按钮中,我想在从数据库加载项目之前删除QTableWidget中的所有行。

当 rowcount = 1 时,从 QTableWidget 中删除所有行会使应用程序崩溃。 我正在使用以下逻辑删除所有行。

if( ui->tableWidget->rowCount() > 0)
{
  ui->tableWidget->setRowCount(0);
}

也尝试过以下逻辑

 while (ui->tableWidget->rowCount() > 0)
{
  ui->tableWidget->removeRow(0);
 }

当 rowCount = 1 时,我的应用程序使用任一逻辑崩溃。 只有当我在发布模式下构建我的应用程序而它在调试模式下工作正常时才会发生这种情况。

我能知道我的应用程序为什么会崩溃吗?

【问题讨论】:

  • 你确定你的程序在这些行崩溃了吗?
  • @Robert 是的,我通过注释代码行进行了手动调试。我还使用 QDebug 在删除行(0)后打印行数。它一直显示到 rowCount = 1,然后崩溃。
  • 这并不一定意味着程序恰好在这些行崩溃,我在想的是你可能会访问(稍后)tablewidget的第一个元素,当你删除它时你会得到一个访问冲突。 ...可能是,只是想帮助 ^^
  • 尝试使用ui->tableWidget->clearContents() 而不是setRowCount(0)
  • @Meefte...我也试过 clearContents() 。它的崩溃。 :(

标签: qt qt4 qtablewidget


【解决方案1】:

我遇到了同样的问题,从一天到另一天它停止工作,我找不到我的代码的哪一部分导致我的程序崩溃。

我的程序用于从文件夹中读取文件并将文件信息上传到 QTableWidget,我还使用 cellWidgets 获取一些信息。

这些是我想到的问题,你应该检查它们没有发生在你身上:

  • 程序一直在修改表,所以也许我试图访问一个空表。所以我评论了我调用表格行的行并对其进行了调试,但这不是问题。

  • 这可能是调试器的问题,所以我尝试在 Release 和 Profile 模式下构建它,但还是不行。

  • 我在尝试访问 cellWidget 信息时可能会遇到问题,所以我检查了一下并没有尝试访问它。

  • 也许问题出在我试图消除具有 cellWidget 的行时,所以我在将行数设置为 0 之前尝试使用 ui->tableWidget->clearContents(),(没有用)

    李>

在尝试了所有这些之后,我发现了this 帖子。基本上我用它的内部实现ui->table->model()->removeRows(0,ui->table->rowCount());替换了setRowCount(0),调试它并且它工作了。

【讨论】:

    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多