清除 QGraphicsScene 中的小部件:崩溃

2023-12-15

我有一个 QGraphicsScene,里面有一个 QPushButton,清除这个场景将使我的应用程序崩溃。有没有正确的方法来使用 QWidget 清除场景?

单击按钮时以下代码会崩溃:

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsProxyWidget>
#include <QPushButton>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QGraphicsScene *scene = new QGraphicsScene();

    QGraphicsView *view = new QGraphicsView();
    view->setScene(scene);
    view->show();

    QPushButton *button = new QPushButton("button");
    QObject::connect(button, SIGNAL(clicked()), scene, SLOT(clear()));

    QGraphicsProxyWidget *proxy = scene->addWidget(button);

    return app.exec();
}

程序崩溃的原因是 QGraphicsScene::clear() 方法删除了 QButton(及其关联的数据结构)在使用这些数据结构的方法调用中间。然后,在clear()返回后,调用方法立即尝试访问现在已删除的数据(因为它不希望在例程中间被删除),然后砰的一声——崩溃了。你的问题是一个例子重入问题.

避免被鞋带绊倒的最简单方法是使信号/槽连接成为 QueuedConnection 而不是 AutoConnection:

 QObject::connect(button, SIGNAL(clicked()), scene, SLOT(clear()), Qt::QueuedConnection);

这样,clear() 方法调用将不会被执行,直到after按钮的鼠标按下处理例程已返回,因此将从可以安全删除按钮的上下文中调用clear()。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

清除 QGraphicsScene 中的小部件:崩溃 的相关文章

  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 使用二分查找在排序的多维数组中查找数字

    我们得到了一个递增排序的多维数组 例如 int mat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 如何使用二分查找来查找特定数字 假设我正在寻找 3 您可以通过将一维索引转换为其对应的二维索引来实现此目的
  • 在数据库中记录 Hangfire RecurringJob 的执行情况?

    我已经设置了hangfire我的 ASP NET 项目成功 即在我的数据库中创建了 11 个 Hangfire 表 我在里面尝试了以下命令Application Start 我的项目的Global asax namespace myAPI
  • SQLite DATETIME 列与实体框架

    我有一个现有的 SQLite 数据库 我想在实体框架中使用它 然而 SQLite 奇怪的类型系统意味着你甚至可以 create table temp temp datetime insert into temp values whateve
  • 使用 PHP 身份验证进行 HTTP 身份验证

    我正在为我的网站创建一个会员区域 并且它已经在运行 我使用 mysql 和 php 对成员进行身份验证 效果非常好 但现在出现问题 我想为会员提供将文件上传到系统的可能性 并且这些文件应该仅对登录的会员可用 我知道我可以将这些文件存储到数据
  • SyntaxError: 当尝试将对象参数传递给 onclick 函数时,元素列表后缺少 ]

    我正在尝试迭代对象列表 并使用按钮为每个对象创建一个列表项 当我添加onclick对他们起作用 我收到这个错误 语法错误 元素列表后缺少 这是我的代码 box resources forEach function box box resou
  • 遗传算法中的轮盘选择

    谁能提供一些轮盘赌选择函数的伪代码 我将如何实现这个 我真的不明白如何阅读这个数学符号 我从来没有做过任何概率或统计数据 我自己这样做已经有几年了 但是在谷歌上很容易找到以下伪代码 for all members of population
  • Bash 参数扩展

    我有一个使用以下逻辑的脚本 if z 1 then if any parameter is supplied ACTION clear ACTION else ACTION echo otherwise set it to echo fi
  • 合并两个不同长度的python pandas数据帧+求和公共值

    我有以下问题 我有两个不同长度的 pandas 数据帧 其中包含一些具有共同值的行和一些不同的行 如下所示 df1 s1 s2 s3 s4 sp1 1 0 1 1 sp2 1 1 0 1 sp3 1 1 1 0 sp4 1 1 1 1 df
  • 模拟“如果不存在则创建用户”的语法错误

    MySQL 不允许您指定if not exists中的条款create user声明 尽管事实上create table and create procedure支持这一点 2005 年曾有一个对此的功能请求 但 MySQL 开发人员已经对
  • 使用 MySQLi 的 real_escape_string 作为静态函数

    我想知道是否可以转义字符串 使用 real escape string 而无需先创建对象实例来应用该函数 即 我们可以这样做 database new mysqli DB HOST DB USER DB PASS DB NAME datab
  • 限制在 PDF 页面边界内移动/拖动 pdf 注释

    我正在使用 PDF 套件库在 PDF 视图上加载一份 PDF 我在 pdf 视图上添加了一个自定义视图 与 PDF 注释相同 并且允许用户使用 UIPanGestureRecognizer 在 pdf 视图上 在 pdf 视图 容器视图内
  • 如何在MSVC中有效地将两个__m128d转换为一个__m128i?

    转换然后移位然后按位或是从两个转换的唯一方法 m128d到一个单一的 m128i 这对于 x64 构建中的 Xcode 来说是完全可以接受的 m128d v2dHi m128d v2dLo m128i v4i mm set epi64 mm
  • 如何杀死 C# 线程?

    我有一个线程在我们的 旧 SQL 服务器上查找数据 当数据进入时 我将信息发布到模式对话框中 在所有这些处理正在进行时 用户不能也不应该做任何其他事情 模式对话框只是让他们看到我正在做某事并防止他们同时运行另一个查询 有时 很少 当代码调用
  • 如何在 vi 搜索和替换中包含正斜杠

    我有一个包含字符串的文件usrbin 我想寻找usrbin并将其替换为 usr bin I tried s usrbin usr bin g 但它显示错误E488 Trailing characters 如何在搜索和替换中包含正斜杠 这里有
  • Enterprise Library 6 验证配置文件

    我正在尝试学习 EnterpriseLibraryValidatoin 当我配置 TypeValidation 通过配置文件验证类时 它不会拾取 但是当我添加数据注释时它会正确验证 我不知道我是否遗漏了一些东西 请提供任何帮助 验证配置文件
  • JS:仅过滤非空和字符串值类型的数组

    我正在尝试过滤这样的数组 array filter e gt return e 有了这个我想过滤所有空字符串 包括undefined and null 不幸的是 我的数组有一些不应该存在的数组 因此 我还需要仅检查字符串值并删除所有其他值
  • 通俗地说,Ruby 自我?

    Ruby self 什么时候引用 Object 什么时候 self 引用 Ruby 类 带有示例的解释会很棒 我不明白这个问题 类本身就是对象 假设我有一堂课Person 这实际上是一个实例Class 所以你可以让 self 引用 Arti
  • 在 Javascript 中将数字连接为字符串

    myCoolObject a 0 b 12 c 24 我想串联a b and c使它们看起来像一个唯一的字符串 a b c 或示例中的 0 12 24 a b and c总是代表数字 将它们中的每一个从 int 转换为 string 需要大
  • 未找到整数 parseInt 方法

    我正在尝试在这段代码中测试一个简单的方法 您在其中使用接收参数的方法 正在发生的问题是Integer解析 int 方法 命令提示符给出的错误是 java 24 error cannot find symbol cholo Integer p
  • 清除 QGraphicsScene 中的小部件:崩溃

    我有一个 QGraphicsScene 里面有一个 QPushButton 清除这个场景将使我的应用程序崩溃 有没有正确的方法来使用 QWidget 清除场景 单击按钮时以下代码会崩溃 include