小编Mar*_*k R的帖子

Qt:用鼠标将QGraphicsItem(boundingRect())调整为QGraphicsScene

我想调整boundingRect()我的QGraphicsItem使用鼠标.

为了构建这个,我找到了这个主题.因此,我设法使其适用于我boundingRect()的主题的权利,直接和最底层.

但由于我的项目的位置是用左上角定义的,boundingRect()因此修改项目的大小会更加复杂,移动链接到此位置的边缘.

我尝试了左上角,但右下方也在移动.我想将右下角固定为仅改变大小而不是整个位置.

这是我的代码的一部分:

void Myclass::mouseMoveEvent(QGraphicsSceneMouseEvent *event) 
{
    if(_resizemode) //if bottom selected
    {
        prepareGeometryChange();
        _h = event->pos().y();
    }

    if(_resizemode2) //if bottom right selected
    {
        prepareGeometryChange();
        _h = event->pos().y();
        _w = event->pos().x();

    }

    if(_resizemode3) //if right selected
    {
        prepareGeometryChange();
        _w = event->pos().x();
    }

    if(_resizemode4) //if top left selected HERE IS MY ISSUE
    {
        prepareGeometryChange();
        setPos(pos().x()+ event->pos().x(), pos().y() + event->pos().y());
        _h = _h - event->pos().y();
        _w = _w - event->pos().x();

    } …
Run Code Online (Sandbox Code Playgroud)

c++ qt resize mouseevent qgraphicsitem

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

CFHTTPMessageAddAuthentication无法向请求添加身份验证数据

我正在尝试扩展SocketRocket库的功能.我想添加身份验证功能.

由于此库使用CFNetwork CFHTTPMessage*API进行HTTP功能(需要启动Web套接字连接),我正在尝试使用此API来提供身份验证.
有完美匹配的功能:CFHTTPMessageAddAuthentication,但它不能像我期望的那样工作(据我理解的文档).

以下是显示问题的代码示例:

- (CFHTTPMessageRef)createAuthenticationHandShakeRequest: (CFHTTPMessageRef)chalengeMessage {
    CFHTTPMessageRef request = [self createHandshakeRequest];
    BOOL result = CFHTTPMessageAddAuthentication(request,
                                                 chalengeMessage,
                                                 (__bridge CFStringRef)self.credentials.user,
                                                 (__bridge CFStringRef)self.credentials.password,
                                                 kCFHTTPAuthenticationSchemeDigest, /* I've also tried NULL for use strongest supplied authentication */
                                                 NO);
    if (!result) {
        NSString *chalengeDescription = [[NSString alloc] initWithData: CFBridgingRelease(CFHTTPMessageCopySerializedMessage(chalengeMessage))
                                                              encoding: NSUTF8StringEncoding];
        NSString  *requestDescription = [[NSString alloc] initWithData: CFBridgingRelease(CFHTTPMessageCopySerializedMessage(request))
                                                              encoding: NSUTF8StringEncoding];
        SRFastLog(@"Failed to add authentication data `%@` to a request:\n%@After a chalenge:\n%@",
                  self.credentials, requestDescription, chalengeDescription); …
Run Code Online (Sandbox Code Playgroud)

macos objective-c cfnetwork digest-authentication ios

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

iOS/OS X带宽管理NSURLSession

应用

我有非常复杂的应用程序,它使用多种网络服务.其中一些是带宽要求和时间关键(例如SIP服务),有些更容忍互联网连接不良(例如电源点显示).

问题

现在存在饥饿问题(一个服务可以支配整个带宽).

接收数据很容易解决.计算每个服务的数据速率,应用程序将所需的数据速率发送到服务器,服务器控制传入数据的速度.

困难的问题是在发送数据时控制数据的速度.对于原始套接字连接,这很容易.套接字输出流简单地由子类包装,子类NSOutputStream延迟流事件HasSpaceAvailable,具体取决于在某个时间单元中已经写入套接字的字节数.

问题是如何正确地做到这一点NSURLSession?我可以为委托方法中提供的HTTP正文的输入流做同样的技巧:

- (void)URLSession:(NSURLSession *)session
              task:(NSURLSessionTask *)task
 needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler
Run Code Online (Sandbox Code Playgroud)

但是这种方法不会考虑HTTP帧(标题).对于某些将进行密集轮询的服务,HTTP帧可以是发送数据的重要部分.因此,要正确控制数据速率,应考虑HTTP帧.问题是没有API可以帮助控制整个HTTP协议的数据速率.我可以看到API,它只允许控制HTTP请求体的数据.

更新

我试过使用API​​ needNewBodyStream,它不起作用.NSURLSession同步使用传递的流.任何将数据拆分成可能延迟发送的块的尝试都会导致一些奇怪的错误和请求根本不会被发送.

所以我正在寻找任何替代方案.答案中提出的解决方案:NSURLProtocol自己的实现有很多缺点:

  • 许多复杂的代码不会传递与我的NSURLSession实例相关的内容
  • 区分哪些服务的问题是哪个带宽桶分配请求
  • 这对整个应用程序有影响,我提供了一个框架

所以我仍在寻找更好的解决方案

macos objective-c ios nsurlsession swift

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

CMake Zero Check无法检测Xcode生成器的CMakeLists.txt文件中的更新

背景

我有一个很棒的项目,可以完美地在Windows上运行.在应用某些更改CMakeLists.txt并构建项目时,Visual Studio项目已正确更新.

Xcode版本:10.0(10A255)或10.1(10B61)(在不同的机器上测试).

cmake版本:3.12.2或3.13.1

问题

在Mac OS for Xcode上构建相同项目时出现问题.配置cmake后:

cmake .. -G Xcode
Run Code Online (Sandbox Code Playgroud)

生成的项目工作正常,一切正常构建,测试正在通过.

现在,当CMakeLists.txt文件被修改(开发项目时或从存储库中获取新的更改时)和/ ZERO_CHECK或被BUILD_ALL选中时,构建不会导致Xcode项目更新.调用cmake .也不会检测到更改.

解决方法

我发现最好的解决方法是删除 一切两个文件:cmake_install.cmakeCMakeCache.txt.然后重新运行生成项目的命令cmake .. -G Xcode.
在这种情况下,整个检测从头开始重做,但至少构建不会从零开始(未重新编译未更改的文件).

这很痛苦,因为必须完成大量的手动操作,并且必须重新创建项目,这会花费时间.

提示

在之前的一些项目中,我遇到了类似的问题,但只有当maven检测到依赖项的更新时才会发生这种情况,因此很少发生.当它发生时我只是touch CMakeLists.txt再次打电话和建立,这个解决方法很好.此解决方案不适用,因为每个构建都有此问题.

我怀疑protobuf生成程序有它的东西,但当我禁用它时,问题仍然存在.

我试图通过创建简单的项目文件来提供完整的最小示例,但我无法重现该问题.对于所有其他项目,它只是工作,所以系统配置不是问题.

问题

如何在运行时调试项目生成过程cmake以查找此问题的来源?

这是一个已知的问题吗?

有没有更好的解决方法,不会导致 完全重建 重新生成项目文件(还涉及检测系统功能)?

c++ xcode cmake

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

nlohmann::json 的模板问题

这是我的代码和错误,下面我将展示一些有效的代码。

\n
#include <iostream>\n#include <string>\n\n#include <nlohmann/json.hpp>\n\nusing JSON = nlohmann::json;\nusing std::cout;\nusing std::endl;\nusing std::string;\n\ntemplate <class ObjectType>\nvoid dump(const JSON &json) {\n    for (auto &[key, value]: json.items()) {\n        string foo = value.get<std::string>();\n        cout << "Key: " << key;\n        cout << " Value: " << foo << endl;\n    }\n}\n\nint main(int, char **) {\n    JSON json;\n    json["alpha"] = "beta";\n    dump<string>(json);\n} \n
Run Code Online (Sandbox Code Playgroud)\n
-$ g++ -std=c++17 Foo.cpp -o Foo && Foo\nFoo.cpp: In function \xe2\x80\x98void dump(const JSON&)\xe2\x80\x99:\nFoo.cpp:14:37: error: expected primary-expression before \xe2\x80\x98>\xe2\x80\x99 token\n   14 |   string foo = …
Run Code Online (Sandbox Code Playgroud)

c++ nlohmann-json

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

为什么我不能在多重继承 C++ 中使用“using”?

我尝试实现一些接口及其子接口。这是我的想法:

         Interface
         /       \
  Interface2    InterfaceDefination
        |        /
  Interface2Defination  
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

         Interface
         /       \
  Interface2    InterfaceDefination
        |        /
  Interface2Defination  
Run Code Online (Sandbox Code Playgroud)

我的预期输出是:

method1 from InterfaceDefination
method2 from Interface2Defination
print from Interface2Defination
Run Code Online (Sandbox Code Playgroud)

但意外地我收到了这些错误:

main.cpp:33:24: error: variable type 'Interface2Defination' is an abstract class
  Interface2Defination c;
                       ^
main.cpp:5:16: note: unimplemented pure virtual method 'method1' in 'Interface2Defination'
  virtual void method1() = 0;
               ^
1 error generated.
make: *** [<builtin>: main.o] Error 1
exit status 2
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/9ncoGfn4P

在这种情况下,错误意味着using关键字没有使方法method1在 class 中可用Interface2Defination。我应该用它做什么?

c++ diamond-problem

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

自定义视图,看起来像UIAlertView

我需要的东西看起来像UIAlertView(相同的背景透明而不是全屏),阻止其他UI部分,并有一些自定义内容.此自定义内容为:两个带标签的复选框和两个底部的YES/NO按钮.

子类或自定义UIAlertView看起来并不有用(请参阅此答案)并且它很危险(Apple可以拒绝代码).我正在考虑创建自己的自定义UIView(可能UIViewController),但我不知道如何让它看起来像UIAlertView.我的意思是我想让它改变它的外观依赖于iOS版本(iOS7).

更新:我可以放弃os版本依赖,它会很好,但这是附加功能.
主要的问题是:有没有一种很好的方法来制作这样的视图,它看起来和感觉像UIAlertView没有大量的工作?UIAlertView直接定制看起来既复杂又危险.

objective-c ios

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

如果有不明智的字符,如何将URL转换为URI?

我有URL对象,路径包含不明智的字符(RFC 2396)在我的情况下它是"|" (管)字符.现在我需要安全地将其转换为URI,但URL.toURI()抛出异常.

我读过URL文档,但这部分让我感到困惑:

URL类本身不会根据RFC2396中定义的转义机制对任何URL组件进行编码或解码.调用者负责编码任何字段,这些字段需要在调用URL之前进行转义,并且还要解码从URL返回的任何转义字段.此外,由于URL不知道URL转义,因此它无法识别相同URL的编码或解码形式之间的等效性.

那我该怎么办呢?在转换过程中对此字符进行编码的模式是什么?我是否需要创建URL对象的编码副本?

java url uri http

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

使用HA1的HTTPURLSession摘要认证(不是密码)

简单地说,我有使用user nameHA1值进行摘要认证的场景(在过去某处计算过,或者通过对其他服务器的认证是提供者).密码不可用.

现在我该如何处理这种情况NSURLSession

我是否必须手动完成(计算HA2response我自己)或者是否有一些解决方案?(它应该存在,因为将密码保存为纯文本是一个安全问题).

请注意我的场景HA1来自对其他服务器的身份验证,因此NSURLCredential 持久化NSURLCredentialPersistencePermanent不能解决我的问题.

macos objective-c digest-authentication ios nsurlsession

6
推荐指数
0
解决办法
166
查看次数

具有不完整类型的 lambda 函数

以下代码可以正常编译:

\n
#include <cstddef>\n\nstruct A {\n    char a;\n    static constexpr int off(void) { return offsetof(A, a); }\n    static constexpr int (*off_p)(void) = off;\n};\n
Run Code Online (Sandbox Code Playgroud)\n

以下看似相似的代码\n仅使用 lambda 简称,但无法编译:

\n
#include <cstddef>\n\nstruct A {\n    char a;\n    static constexpr int (*off_p)(void) =\n         [](void) static constexpr ->int { return offsetof(A, a); };\n};\n
Run Code Online (Sandbox Code Playgroud)\n
$ g++ -std=c++23 bad.cpp \nIn file included from /usr/include/c++/13/cstddef:50,\n                 from bad.cpp:1:\nbad.cpp: In static member function \xe2\x80\x98A::<lambda()> static\xe2\x80\x99:\nbad.cpp:5:74: error: invalid use of incomplete type \xe2\x80\x98struct A\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

所以基本上我有两个不同的问题,因为我不明白这里发生了什么。

\n
    \n
  1. 为什么在第一种情况下允许使用不完整类型?
  2. \n …

c++ c++23

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