小编Bas*_*Ben的帖子

使用C++/Qt4应用程序作为Web应用程序的后端

对于我的一个应用程序,我想提供一个最小的Web界面.这个核心应用程序是用C++编写的,并使用Qt4作为框架.由于我还使用了一些我编写的库来计算一些东西并进行一些复杂的数据管理,所以我想将这个现有的代码用作Web界面的后端.

想法1:使用嵌入式Web服务器

我尝试的第一件事(在某种程度上有效)是使用嵌入式Web服务器(mongoose).你可以想象,它只是一个非常薄的库,你必须自己实现很多东西(比如会话管理,cookie等).

想法2:使用普通的Web服务器并在我的应用程序中添加fcgi/cgi/scgi后端

接下来我想到的是使用成熟但紧凑的Web服务器(例如,lighttpd)并简单地为它提供fcgi/scgi/cgi后端.我可以使用一个好的框架编写Web应用程序,比如Pylons,PHP或RoR,(...),并且只需要一个URL前缀,这样/a/...我就可以直接与后端通信.

我试图将libfcgi实现到我的应用程序中,但它看起来比需要的更麻烦(例如,您必须实现自己的TCP/IP套接字以在您的应用程序和Web服务器之间传递数据并通过FCGI库进行隧道传输, MEH)

想法3:创建我的应用程序的命令行版本,它执行最基本的操作并使用普通的Web服务器和框架来完成剩下的工作

这是我想到的第三个想法.它基本上是使用传统方式(PHP,RoR等)创建Web应用程序,并使用我的应用程序的命令行版本来处理数据并在需要时返回它.


我在创建Web应用程序方面有一些经验,但我从来没有做过这样的事情,所以我想听听一些想法或建议.我想在浏览器上使用JavaScript(即AJAX),并在Web浏览器和服务器之间传递一些JSON结构,以使用户体验更加顺畅.

那你有什么建议,想法呢?老实说,我不想重新发明轮子.

c++ ajax web-services backend qt4

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

从C/C++中解析简单的MIME文件?

我已经在网上搜索了几天,但我似乎无法找到解决问题的好方法:

对于我的一个项目,我正在寻找一个好的(轻量级)MIME解析器.我的客户提供MIME格式的文件(线性,无层次结构),其中包含3-4个"部分".应用程序必须能够拆分这些部件并独立处理它们.

基本上这些MIME文件就像原始电子邮件消息,但没有SMTP标头.相反,它们以MIME-Header"MIME-Version:1.0"开头,之后部分如下.

我正在使用C++作为应用程序,因此欢迎使用C++库.我们也欢迎标准的C库; 但它应符合以下标准:

  • 开放(至少是LGPL),而不是properiaty
  • 紧凑 - 我只需要解析器,没有SMTP/POP3支持
  • 跨平台(针对Windows,Mac OS X和Linux)

经过几天的搜索,我发现了以下库和使用它们的原因:

  • mimetic(C++)---虽然这个库看起来很完整并且用于C++,但它基于 glib,它不能在Windows上正确编译.
  • Vmime(C++)---似乎完整,但没有正式的Windows支持.他们还提供"双重许可"("商业LGPL"+ GPL).似乎包含在Ubuntu和Debian中,但许可证令人困惑.
  • mime ++ ---商业,没有Mac支持.
  • Chilkat软件MIME C++库 ---商业和专注于Windows.

我真的不想编写自己的MIME解析器.MIME非常普遍,必须有一些开放的库才能以理智的方式处理这种文件格式.

那么,你们有任何想法,建议或链接吗?

提前致谢!

c++ parsing mime

8
推荐指数
2
解决办法
8416
查看次数

QObject儿童的顺序(战略问题)

对于我的一个项目,我有一个QObject派生对象树,它利用QObject的父/子功能来构建树.

这非常有用,因为我使用了信号和插槽,使用Qt的保护指针并期望父对象在删除时删除子对象.

到现在为止还挺好.不幸的是,现在我的项目要求我管理/改变孩子的顺序.QObject没有提供任何改变其子节点顺序的方法(例外:QWidget的raise()函数 - 但在这种情况下这没用).所以现在我正在寻找一种控制孩子秩序的策略.我有一些想法,但我不确定他们的利弊:



选项A:自定义排序索引成员变量

使用int m_orderIndex成员变量作为排序键,并提供一个sortedChildren()方法,该方法返回按此键排序的QObject列表.

  • 易于实现到现有的对象结构中.
  • QObject::children()方法被覆盖时会出现问题 - 当项目的顺序发生变化时,在循环期间会导致问题,也比默认实现更昂贵.
  • 如果所有排序键相等或0 /默认,则应回退到QObject对象顺序.

选项B:儿童冗余清单

在a中维护一个冗余的子项列表QList,并在创建和销毁子项时添加子项.

  • 需要昂贵的跟踪添加/删除的对象.这基本上导致第二个子/父跟踪和许多信号/时隙.QObject已在内部完成所有这些工作,因此再次执行它可能不是一个好主意.也感觉像为改变孩子的顺序这样的简单事情添加了很多臃肿.
  • 良好的灵活性,因为可以根据需要修改儿童的QList.
  • 允许子进程多次进入QList,或者根本不进入QList(即使它可能仍然是QObject的子进程)

选项C:...?

任何想法或反馈,特别是那些已经在自己的项目中解决过这个问题的人,都会受到高度赞赏.新年快乐!

qt children qt4 qobject

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

Qt QGraphicsScene 原点

每当我向 a 添加新项目时QGraphicsScene, 的原点QGraphicsScene似乎会随着我刚刚添加的项目的位置而改变。

如何使QGraphicsScene原点固定?

我是否需要先在 QGraphicsScene 中添加该项目,然后为该项目指定一个位置?

c++ qt

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

如何使用QML在iOS和Android上以正确的方式显示网页内容

我想在iOS和Android上使用Qt 5.5开发和发布Qt/QML应用程序,我正试图找到一种在我的QML应用程序中显示简单Web内容(如Facebook登录页面)的方法.

我发现真正令人困惑的是,有多个类具有相似的名称但不适用于所有平台或缺少一些必需的功能.

这是我发现的选项:


选项1:WebView(QtWebView 1.0)

http://doc.qt.io/qt-5/qml-qtwebengine-webengineview.html

优点:

  • 适用于iOS
  • 适用于Mac OS X.

缺点:

  • 无法将其用于社交登录,因为我们缺少"将要加载的URL"信号,我们可以使用该信号来捕获成功的登录/错误.

选项2:WebView(QtWebKit 3.0)

http://doc.qt.io/qt-5/qml-qtwebkit-webview.html

优点:

  • 显然具有捕获社交登录所需的功能(onNavigationRequested(request))
  • 适用于OS X.

缺点:

  • 在iOS上不起作用.在尝试为iOS模拟器构建时,我得到:

QQmlApplicationEngine无法加载组件 http://badkitteh.local:8888/backend /:6模块"QtWebKit"未安装

我尝试添加webkitwebkitwidgets.pro没有成功的文件.(WTF?)


选项3:WebEngineView(QtWebEngine 1.0)

http://doc.qt.io/qt-5/qml-qtwebengine-webengineview.html

优点:

  • 适用于OS X.
  • 显然有必要的方法来捕获社交登录/错误(loadingChanged(loadRequest)).

缺点:

  • 需要QtWebEngine::initialize()在main()中调用.
  • 需要我手动添加webengineQT.pro文件中.这使得它在OS X上构建/启动但仍然不在iOS上.跆拳道?
  • 在iOS上不起作用:

QQmlApplicationEngine无法加载组件 http://badkitteh.local:8888/backend /:6模块"QtWebEngine"未安装


我还没有测试Android,但似乎这QtWebView是唯一适用于多个平台而不必使用单独的QML文件的东西.不幸的是,无法捕获URL更改/加载请求.

这令人沮丧.

我如何WebView在不使用外部库/工具等的情况下获得基于iOS和Android的应用程序内的简单社交登录?要么我在这里遗漏了一些东西,要么现在WebViewQML/Qt 的情况真的搞砸了.为什么有这么多选择?为什么UIWebViewiOS上没有简单的包装器和Android上的等效包装器?

android webview qml qwebkit qt5

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

iOS 4.2上有哪些字体?

我正在寻找iOS 4.2上可用字体的正式列表,因为Apple在4.2更新中包含了更多字体.

不幸的是,我似乎无法在主文档中找到任何内容,也无法在Apple的开发者网站上找到任何内容; 但我依旧记得,在某个地方,我看到了一个"官方",也就是说,Apple在iOS上提供的所有字体列表.

如果有人能指出我的文档,那就太好了.:)

提前致谢!

更新:

在App Store上找到一个名为"Fonts"的应用程序(免费).它只显示设备上的所有字体.

iphone fonts ipad ios4

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

如何协同自动生成的iOS应用程序?

问候,

我正在编写一个Web服务器脚本,可以创建自定义iOS应用程序(基本上可以交换徽标和其他一些东西).Web服务器自定义先前上载的"shell".ipa并重新压缩整个容器以将其发送到用户的浏览器.即:我们在Web服务器上自定义先前上载的.ipa,并让用户下载它以提交到App Store.

下一步是重新编码整个.ipa - 因为我们更改了.IPA内容,用户必须使用自己的签名身份 - 这样他才能真正将其上传到App Store.

据我所知,有一个"CodeResources"文件,它包含了bundle中每个资源文件的某种哈希值,而且可执行文件也包含某种嵌入式签名.要生成这些,您必须在用户的计算机上使用"codesign"实用程序,然后使用Application Loader将其提交到App Store.到目前为止正确吗?

我想知道的是:

  1. 有没有办法在服务器上对.ipa进行编码(让用户事先上传他的证书),这样他就没有任何额外的工作要做了?
  2. 如果1)不可能,是否有某种工具允许重新编码.ipa没有太多麻烦?Xcode似乎需要一些项目设置工作才能进行一些代码签名 - 如果可能的话.
  3. 有没有其他方法可以为用户配置.ipa文件 - 可能无需手动手动操作?

提前致谢!

iphone xcode code-signing ios application-loader

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

使用C++进行网络守护进程是否有任何缺点?

在过去的几年里,我一直在用不同语言编写许多网络守护进程,现在我即将开始一个新项目,需要一个新的自定义网络协议实现.

所述协议非常简单 - 一些基本的JSON格式的消息,这些消息在一些基本的帧包装中传输,以使客户端知道消息完全到达并准备好被解析.

守护进程需要处理多个连接(同时大约200个)并对它们进行一些管理并传递消息,就像在聊天室中一样.

在过去,我一直在使用C++来编写我的守护进程.通常使用Qt4框架(网络部分,而不是GUI部分!),因为这也是我用于其他项目的内容,而且操作简单且非常便携.这通常工作得很好,我没有太多麻烦.

作为一名Linux管理员,我注意到大多数网络守护进程都是用简单的C编写的(当然有些是用其他语言编写的,但我感觉80%以上的守护进程用简单的C)写的.

现在我想知道为什么会这样. 这是由于纯粹的历史UNIX背景(如KISS)还是普通的可移植性或减少膨胀?有哪些原因不能使用C++或任何"更上一层楼"语言的东西像守护进程?

提前致谢!


更新1:

对我来说,使用C++通常更方便,因为我有对象具有getter和setter方法等.普通C的"上下文"对象在某些时候可能是一种真正的痛苦 - 特别是当你习惯于面向对象的编程时.

是的,我知道 C++是C的超集,C代码基本上是C++您可以使用C++编译器编译任何C代码.但那不是重点.;)


更新2:

我知道现在使用像Python,node.js等类似的高级(脚本)语言会更有意义.我过去就这样做了,我知道这样做的好处(至少我希望我这样做) - 但这个问题只是关于C和C++.

c c++ networking daemon

4
推荐指数
2
解决办法
1037
查看次数

Bootstrap:文件输入字段在模态对话框中使用时忽略单击

我对Bootstrap和文件字段有一点奇怪的问题:

对于一个项目,我正在实现一个简单的上传对话框.

http://jsfiddle.net/RxxSv/4/

一旦我添加data-toggle="modal"到模态容器,文件输入字段就会停止对点击作出反应(并且浏览器不会显示文件选择对话框).

我怀疑这是由Bootstrap的模态代码/事件处理引起的.在某个地方,点击事件正在迷失,但我无法弄明白.

有任何想法吗?

javascript events file-upload twitter-bootstrap

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

正确地重新加载QQmlApplicationEngine

我有一个基于QML的应用程序,main.qml从文件系统加载文件,如下所示:

myEngine->load("main.qml");
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想"重新加载"引擎,以防main.qml被更新版本替换.

我到目前为止所尝试的是load()再次调用,假设引擎会像其他Qt类一样自动重置.

不幸的是,这种情况并非如此.如果我再次调用该方法,将出现另一个窗口,其中包含更新的qml文件的内容,而原始窗口保持打开状态并继续显示旧的qml文件.

为了解决这个问题,我尝试调用load(QUrl()),然后clearComponentCache()对新文件进行最终加载调用.这导致相同的效果.

任何想法如何在应用程序运行时"正确"重新加载QML引擎?

qt qml qqmlapplicationengine

4
推荐指数
2
解决办法
2479
查看次数

在Swift中交换枚举值

我目前对Swift很新,我想知道以下代码是否可以以任何方式优化/缩短:

enum CardOrientation {
    case Horizontal, Vertical
}

func toggleCurrentCardOrientation() {
    switch currentCardOrientation {
    case .Horizontal: currentCardOrientation = .Vertical
    case .Vertical: currentCardOrientation = .Horizontal
    }
}
Run Code Online (Sandbox Code Playgroud)

让我们假设CardOrientation总是只有这两个可能的值,并且每个调用toggleCurrentCardOrientation应该在每个值之间切换.

swift

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