小编Tho*_*omi的帖子

跨平台崩溃处理程序

我正在寻找一个跨平台的崩溃处理程序.谷歌Breakpad看起来很有前途,但它非常缺乏任何文档,并且需要合理数量的摆弄实际开始.

什么是更好的选择?

我所需要的只是能够在崩溃时可靠地记录故障转储,堆栈跟踪和CPU信息.或者,使用Google Breakpad的体验是什么?它是伟大的还是可怕的?

c++ crash cross-platform crash-dumps postmortem-debugging

15
推荐指数
2
解决办法
7872
查看次数

Qt问题:信号和插槽如何工作?

信号和插槽如何在高级抽象中工作?

如何在高级抽象中实现信号和槽?

c++ qt

15
推荐指数
3
解决办法
2万
查看次数

Qt样式表:选择视图数据时,QHeaderView以粗体显示标题文本

我正在尝试使用Qt Stylesheets设计QTableView.一切正常,但只要选择了表视图中的数据,所有表头文本(列标题)都将绘制为粗体文本.

我尝试过这样的事情:

QTableView::section {
    font-weight: 400;
}
QTableView::section:selected {
    font-weight: 400;
}

QHeaderView {
    font-weight: 400;
}

QHeaderView::section {
    font-weight: 400;
}
Run Code Online (Sandbox Code Playgroud)

无济于事.

任何人都可以指出我正确的方向,理想情况下使用样式表?

c++ qt stylesheet

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

如何使用xlib识别顶级X11窗口?

我正在尝试在X11会话中获取所有顶级桌面窗口的列表.基本上,我想获得窗口管理器应用程序切换UI中显示的所有窗口的列表(通常在用户按下ALT + TAB时打开).

我之前从未做过任何X11编程,但到目前为止,我已经设法通过整个窗口列表进行枚举,代码看起来像这样:

void CSoftwareInfoLinux::enumerateWindows(Display *display, Window rootWindow)
{
    Window parent;
    Window *children;
    Window *child;
    quint32 nNumChildren;

    XTextProperty wmName;
    XTextProperty wmCommand;

    int status = XGetWMName(display, rootWindow, &wmName);
    if (status && wmName.value && wmName.nitems)
    {
        int i;
        char **list;
        status = XmbTextPropertyToTextList(display, &wmName, &list, &i);
        if (status >= Success && i && *list)
        {
            qDebug() << "Found window with name:" << (char*) *list;
        }

        status = XGetCommand(display, rootWindow, &list, &i);
        if (status >= Success && i && *list)
        {
            qDebug() …
Run Code Online (Sandbox Code Playgroud)

c++ x11 xlib icccm ewmh

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

如何混合Qt,C++和Obj-C/Cocoa

我在Mac上有一个纯C++/Qt项目,但我现在发现我需要调用一些只在Cocoa API中可用的方法.按照此处列出的说明:

http://el-tramo.be/blog/mixing-cocoa-and-qt

我在".m"文件中有一个C++类实现.作为测试,我的"foo.m"文件包含以下代码(#include为清晰起见,已删除相关方法):

int foo::getMagicNumber()
{
    NSCursor *cursor = [NSCursor new];
}
Run Code Online (Sandbox Code Playgroud)

显然,我需要将.m文件添加到名为的qmake变量中OBJECTIVE_SOURCES.我的项目.pro文件如下所示:

TARGET = testApp
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
OBJECTIVE_SOURCES += foo.m
HEADERS += test.h
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试编译项目时,都会收到以下错误:

foo.h:4expected '=', ',', ';', 'asm' or '__attribute__' before 'foo'

这是指向class foo我的头文件中的文件.如果我从.m文件中删除所有cocoa调用,并将.m文件移动到SOURCES我的Qt .pro文件的部分,一切都按预期工作.

我正在使用Qt 4.6.0.

我的问题是:将Cocoa调用与Qt/C++集成的推荐方法是什么,以及我在上面的例子中做错了什么?

c++ cocoa qt qmake objective-c

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

在Mac OS X中模拟按键事件

我正在编写一个应用程序,我需要在Mac上模拟按键事件,给出代表每个键的代码.看来我需要使用该CGEventCreateKeyboardEvent函数来创建事件.问题是这个功能需要Mac键码,而我所拥有的是代表特定键的代码.所以,例如,我收到:

KEY_CODE_SHIFT或者KEY_CODE_A- 这些都是在某处定义的数字常量.

我需要采用这些常量并将它们转换为CGKeyCode值.

我当前的尝试使用类似于这个SO问题的代码.问题是它只适用于可打印字符.如果所有其他方法都失败了,我就不会对转换进行硬编码,但这意味着我需要一个可能的CGKeyCode值表,这是我还没有找到的.

有任何想法吗?

c++ keyboard macos cocoa macos-carbon

13
推荐指数
2
解决办法
2万
查看次数

iptables c ++控件

我需要在C++程序中控制进出linux机箱的入站和出站流量.我可以iptables从我的程序中调用,但我更愿意切断中间人并自己访问内核API函数.

我相信我需要使用libnfnetlink,但是,我无法找到任何API文档或示例程序.

我需要构建的规则非常简单 - 例如丢弃目标端口等于X的数据包等.我不打算编写完整的防火墙应用程序.

任何人都可以建议更好的方法,或提供一些文档或示例应用程序的链接?我宁愿避免阅读iptables代码,但我想我可能不得不,如果我找不到更好的资源.

c++ linux networking firewall

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

改进代码的指南

您遵循哪些指导原则来提高代码的一般质量?许多人都有关于如何编写C++代码的规则,这些代码可能会使错误变得更加困难.我见过人们坚持认为每个if语句后跟一个大括号块({...}).

我对其他人遵循的指导方针及其背后的原因感兴趣.我也对您认为是垃圾的指导方针感兴趣,但通常都是这样.有人可以推荐一些吗?

为了让球滚动,我将提到一些开始:

  • 在每个if/ else语句之后总是使用大括号(如上所述).这背后的基本原理是,判断单个语句实际上是一个语句,还是扩展为多个语句的预处理器宏并不总是很容易,因此这段代码会破坏:
    // top of file:
    #define statement doSomething(); doSomethingElse

    // in implementation:
    if (somecondition)
        doSomething();

但如果你使用大括号,那么它将按预期工作.

  • 仅使用预处理器宏进行条件编译.预处理器宏可能导致各种地狱,因为它们不允许C++作用域规则.由于预处理器宏在头文件中具有通用名称,因此我多次搁浅.如果你不小心,你可能会造成各种各样的破坏!

现在告诉你.

c++ coding-style

10
推荐指数
5
解决办法
1616
查看次数

zlib减压失败

我正在编写一个需要解压缩由另一个应用程序压缩的数据的应用程序(这是我无法控制的 - 我无法对其源代码进行更改).生产者应用程序使用zlib使用z_stream机制压缩数据.它经常使用Z_FULL_FLUSH(在我看来可能太频繁,但这是另一回事).这个第三方应用程序也能够解压缩它自己的数据,所以我非常有信心数据本身是正确的.

在我的测试中,我正在使用这个第三方应用程序压缩以下简单文本文件(十六进制):

48 65 6c 6c 6f 20 57 6f 72 6c 64 21 0d 0a

我从应用程序收到的压缩字节看起来像这样(再次,十六进制):

78 9c f2 48 cd c9 c9 57 08 cf 2f ca 49 51 e4 e5 02 00 00 00 ff ff

如果我尝试压缩相同的数据,我会得到非常相似的结果:

78 9c f3 48 cd c9 c9 57 08 cf 2f ca 49 51 e4 e5 02 00 24 e9 04 55

我可以看到两个不同之处:

首先,第四个字节是F2,而不是F3,因此没有设置放气"最终块"位.我假设这是因为流接口永远不知道输入数据的结束时间,所以永远不会设置该位?

最后,外部数据的最后四个字节是00 00 FF FF,而在我的测试数据中则是24 E9 04 55 …

compression zlib

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

静态链接到Qt时加载Qt插件?

我正在尝试在QIcons中使用SVG图形.我有一个静态库,其中包含我的所有图形资源,以及该静态库中的一个方法,该方法返回预先加载了正确图形的QIcons.我正在尝试这样做:

QIcon icon(":/icons/find.svg");
Run Code Online (Sandbox Code Playgroud)

我已经通过使用QDir列出它来验证已加载资源:

qDebug() << QDir(":/icons/").entryList();
Run Code Online (Sandbox Code Playgroud)

但是,未显示SVG图标.当我将图标加载代码更改为:

QIcon icon(":/icons/find.png");
Run Code Online (Sandbox Code Playgroud)

一切正常.

问题似乎是SV​​G插件永远不会被加载.我可以获得支持的图像类型列表,其中包含:

("bmp","pbm","pgm","png","ppm","xbm","xpm")

但没有提到SVG.

我已经确定我在我的静态库.pro文件和我的主应用程序.pro文件中都使用了SVG模块.

编辑:

似乎问题是我静态链接到Qt,因此插件都是静态库.QPluginLoader各州的文件:

请注意,如果您的应用程序与Qt静态链接,则无法使用QPluginLoader.在这种情况下,您还必须静态链接到插件.如果需要在静态链接的应用程序中加载动态库,可以使用QLibrary.

然而,静态链接到这些插件似乎什么都不做(支持的图像格式列表不会增长).

EDIT2:

此外,动态链接到Qt(重建我的整个应用程序后)使上面的代码完美地工作.但是,我静态链接到Qt,所以现在的问题更多的是关于在静态链接到Qt时加载Qt插件而不是一般的图标.我会更新帖子标题以反映这一点.

c++ icons qt svg qt4

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