小编Geo*_* R.的帖子

防止QGraphicsItem移出QGraphicsScene

我有一个固定尺寸从(0; 0)到(481; 270)的场景:

scene->setSceneRect(0, 0, 481, 270);
Run Code Online (Sandbox Code Playgroud)

在它内部,我有一个自定义GraphicsItem,我可以移动它感谢旗帜ItemisMovable,但我希望它留在场景中; 我的意思是我不希望它的坐标既不在(0; 0)之下也不在(481; 270)之下.

我尝试过几种解决方案,比如压倒一切QGraphicsItem::itemChange(),QGraphicsItem::mouseMoveEvent()但我仍然无法达到我想做的目标.

什么是适合我需求的解决方案?我使用QGraphicsItem::itemChange()得不好吗?

提前致谢.

qt qgraphicsitem qgraphicsscene

10
推荐指数
3
解决办法
4472
查看次数

缩放QGraphicsView时调整QPen厚度?

它的一个惊人功能QGraphicsView是能够根据场景的内容进行缩放(实际上每个QGraphicsItem都插入到场景中).在QPixmap我已经正确插入秤,也就是说,如果我提供了4×4的比例因子与此:

view->scale(4,4);
Run Code Online (Sandbox Code Playgroud)

像我想要的那样缩放Pixmap.

但这不是我习惯绘画的情况; 他们的目标是围绕我在我的场景上绘制的像素图,无论比例因素如何,它们都保持1的厚度而不是 - 我猜 - 4.

我一直在搜索关于所有这些东西的文档,试图找出"化妆笔"的确切目的,但我仍然无法让我的矩形更厚.

最后通知:我有一个自定义QGraphicsItem和用于绘制矩形的QPen在运行中即时实现

virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
Run Code Online (Sandbox Code Playgroud)

方法.

有关系吗?

在此感谢您对Qt框架和绘图算法领域缺乏经验/知识表示歉意......

qt qgraphicsview qgraphicsitem qgraphicsscene

9
推荐指数
1
解决办法
7315
查看次数

覆盖现有的django-admin命令

除了编写自定义Django的管理命令,这是非常有据可查的,我希望能够覆盖现有的命令,像manage.py loaddata (fixture)这样之后灯具将被装载到我的数据库,我可以添加一些进一步的治疗.

我想我必须编写一个首先调用'loaddata'的自定义命令,然后进行自己的处理.这样做有什么好办法吗?

有更好的解决方案吗?

python django

8
推荐指数
1
解决办法
1469
查看次数

使用 python asyncio 启动 tls 通信

我有一些使用asyncio并启动“普通”连接的 python 代码片段:

loop = asyncio.get_event_loop()
coro = loop.create_connection(lambda: MyCustomClassProtocol(loop), sock=client_socket)
loop.run_until_complete(coro)
Run Code Online (Sandbox Code Playgroud)

重点是,一旦发生一些交换,我的普通连接就会切换到 tls 连接。按照传统的方式,人们会这样做:

ssl_sock = ssl.wrap_socket(client_socket, do_handshake_on_connect=False)
ssl_sock.do_handshake()
Run Code Online (Sandbox Code Playgroud)

但我真的不知道如何处理这个问题asyncio。我的data_received方法虽然收到了加密的内容,所以我想我可以做一些事情来解密它,但我无法弄清楚。

python ssl

5
推荐指数
1
解决办法
2769
查看次数

Redis:设置集合的最大元素数

在 redis 中,是否可以为集合设置最大数量的元素,以便在使用 时sadd,redis 服务器会阻止该集合包含超过最大数量的元素?例如:

127.0.0.1:6379> SETSIZE KEY 100
Run Code Online (Sandbox Code Playgroud)

提前致谢。

redis

4
推荐指数
1
解决办法
3247
查看次数

boto3会话和aws_session_token管理

我正在开发处理AWS SQS队列的python软件。它boto3主要使用boto3.session.Session

我在这里看到可以将an传递aws_session_tokenSession构造函数。

在Amazon外部运行代码时,我需要定期刷新此代码,aws_session_token因为它仅有效一个小时。因此,我需要自己重新建立实例boto3.Session

我只是想知道事情在AWS内部如何工作。我是否需要aws_session_token通过环境中的新操作来手动刷新会话?还是我的会话“永远”有效/是否在内部处理,因此我不必刷新我的AWS会话?

该文档对我来说似乎不清楚。

amazon-sqs amazon-web-services

3
推荐指数
1
解决办法
4835
查看次数

了解新的gcc序言

我想知道为什么gcc为函数引入了一个新的序言(以及结语) - 尤其是main(),因为我只分析它.例如,之前,它是:

push ebp
mov ebp, esp
sub esp, 0x... ; Allocate memory space into the stack

; ... Some code

; Epilogue
leave
ret
Run Code Online (Sandbox Code Playgroud)

现在这有点复杂(至少要理解):

lea    ecx,[esp+0x4]
and    esp,0xfffffff0
push   DWORD PTR [ecx-0x4]
push   ebp
mov    ebp,esp
push   ecx
sub    esp,0x64

; Some code

; Epilogue
add    esp,0x64
pop    ecx
pop    ebp
lea    esp,[ecx-0x4]
ret
Run Code Online (Sandbox Code Playgroud)

我明白具体是什么,但我无法弄清楚它的目的 .是否使得利用(堆栈溢出)尝试更棘手?另一个召集会议?只是为了让堆栈更安全?(因为我在战争游戏中遇到了这个东西)

最后,我的gcc版本是:gcc版本4.3.2(Debian 4.3.2-1.1)

提前致谢!

assembly gcc intel

2
推荐指数
1
解决办法
1146
查看次数

在lpc1788上进行双缓冲

我面临着极大的担忧.我目前正参与三明治课程,我正在学习如何在嵌入式系统上开发软件 - 就像在open1788板上一样.

我计划实现双缓冲功能,因为我可以在液晶屏上看到闪烁.确实可以在绘制时查看形状!

通过双缓冲,重绘整个屏幕的速度足够快.也许我应该深入研究管理裁剪,所以我只需要重新绘制需要的部分屏幕?但那不是问题.

所以,我写了几个函数来处理双缓冲选项.如果我不希望软件使用双缓冲,那么我不会为它分配内存; 否则我会.

问题是为堆分配的默认空间最多为1024字节.我的临时缓冲区长度为261120字节!(每272像素高481像素宽,每一个16bpp).

因此,malloc返回NULL.

我采取的第一个解决方案是放置静态缓冲区,我的意思是:

static WORD s_double_buf[481*272];
Run Code Online (Sandbox Code Playgroud)

但明显的缺点是,即使您不使用双缓冲,它仍然会被分配.

第二种解决方案是编辑配置文件以使堆更大,每个替换1024个字节,例如1048576字节(0x100000).我不喜欢这个解决方案,因为我应该专注于节省内存空间.

也许我非常想念嵌入式编程技巧?根据那个,最好的解决方案是什么?我怎么能取得进步?我没有告诉你我阅读和挖掘数据表的混乱能力.

我真的很感激,如果有人能为我提供初学者的参考资料,大多数都适合我正在编程的电路板.

提前致谢!

c embedded heap double-buffering

1
推荐指数
1
解决办法
655
查看次数

使用lamba函数时可能的堆栈溢出?

http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp给出的示例中,我们可以看到这样的代码块:

  void do_accept()
  {
    acceptor_.async_accept(socket_,
        [this](boost::system::error_code ec)
        {
          if (!ec)
          {
            std::make_shared<session>(std::move(socket_))->start();
          }

          do_accept();
        });
Run Code Online (Sandbox Code Playgroud)

我是C++ 11的新手.所以我想知道这个代码会不会导致堆栈溢出(过多的递归调用),因为do_accept()会记录do_accept()的回调.

谢谢.

c++ recursion boost c++11

1
推荐指数
1
解决办法
78
查看次数