问题标签 [qstring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为 QString 继承 std::ostream 和 operator<< 的类
地狱 !我正在尝试创建一个可以帮助我将文本输出到标准输出的类......无论如何,除了一件事之外,一切都在工作。假设我已经创建了我的班级的对象。当我这样做时,一切正常:
当我这样做时它也有效:
但是,当我尝试将这两件事联系在一起时,就像这样:
我得到了那个超级大的错误,这最终告诉我 operator<< 不接受 QString 类型的参数。这很奇怪,因为当我不链接 QString 时它可以正常工作......这也有效:
还有这个:
所以我想我的 operator<< 函数有问题......要么我没有正确地制作 operator<<,要么我没有返回正确的值。或者可能有其他问题。无论如何,我无法弄清楚,所以你能帮帮我吗?下面是源代码:
output.h:http : //xx77abs.pastebin.com/b9tVV0AV output.cpp: http: //xx77abs.pastebin.com/5QwtZRXc
当然,超级大错误:D
http://xx77abs.pastebin.com/8mAGWn47
编辑:对于所有你想知道的,我没有使用命名空间......
c++ - 复制到 QMap 时出现 QString 错误。范围问题?
每当我尝试将 QString 添加到 QMap 作为我拥有的 QWidget 类的析构函数中的键时,我目前都陷入了段错误(有时是 sigabrts 由于错误的 malloc) - 我认为它与 QString 的隐式共享模型和范围。
我有一个 QWidget 作为 MDI 中的子窗口,这个 QWidget 有一些 QGLWidget 派生的视口实例作为子窗口。在子窗口中有一个包含项目文件设置的 QMap< QString, QVariant > 包装类,当子窗口关闭时,它的析构函数调用 QWidget::deleteChildren() 删除每个视口。在视口析构函数中,当前设置保存到子窗口的设置中,例如:
sWin.setSetting() 为我希望保存的每个属性调用,'sWin' 是对在子窗口析构函数末尾删除的 QMap 包装类的引用。一切都很好,直到 setSetting() 调用,这只是:
此设置适用于第一个 viewport,在第二个的第一个 setSetting() 调用中,segfault 发生在:
当我的 QString 引用传递给 QMap 时,我是否看到深拷贝失败?如果是这样,为什么?我创建的 QString 尚未超出范围,因为析构函数尚未返回。为什么这会在第二个视口而不是第一个视口上失败?
有时我会在第一个代码示例的 setSetting() 行中得到 sigabrt malloc(): memory corruption in operator+。但同样,在第二个视口的破坏开始时,不是第一个。
对于这个冗长的问题,我深表歉意,但涉及的大量代码分布在许多翻译单元中。这个问题的任何线索都会有很大的帮助!
提前致谢。凸轮
更新
我将我的第一个代码示例更改为:
作为范围问题的测试。它有时会起作用,而有时会给出完全相同的错误;所以大概堆QString被破坏了,它只取决于它的内存位置是否被覆盖。但这也没有任何意义,因为我没有在上面调用 delete,也没有关闭应用程序(只是一个 MDI 子窗口)!
更多代码
当实例化一个新的子窗口时,sWin 在堆上创建。它被带入视口类的析构函数作为来自我的子窗口中的方法的引用:
Sy_project 是(当前)QMap 的一个简单包装类。我完整的视口基类析构函数是这样的(在这里失败,不在派生类中):
瓦尔格林德
在使用 Valgrind 的 memcheck 之后,我发现了许多与我的堆栈跟踪相似的条目。以前从未使用过它,我仍在解密,但这是否是说我的 Sy_project 类(QMap 的包装器)在 setSetting() 调用后已被删除,使 QMap 引用无效?
qt - QString::arg()的参数中的“%1”如何处理?
每个人都喜欢
但是一旦你有最微弱的机会,replacement1
实际上包含%1
甚至%2
任何地方,事情就会变得很痒。然后,第二个QString::arg()
将仅替换重新引入的事件%1
或两者%2
。无论如何,你不会得到"%1"
你可能想要的文字。
有什么标准技巧可以克服这个问题吗?
如果你需要一个例子来玩,拿这个
这将输出
代替
正如预期的那样(不是)。
给
和
给
c++ - 如何将 unicode QString 转换为 std::string?
我需要将 a 转换QString
为std::string
. 但是,如果此字符串包含 unicode 符号,我会得到????
. 如何使用正确的编码转换字符串?
谢谢你。
c++ - 带有 QString 类型的 C++ 中的 switch/case 语句
我想在我的程序中使用 switch-case 但编译器给了我这个错误:
如何使用switch
带有 a 的语句QString
?
我的代码如下:
qt - 将 QString Unix 纪元时间转换为 QString 标准时间
我需要一个优雅的 C++ 函数,它接受一个包含 unix 时间(例如 1295874681)的 QString 参数并将其转换为包含 QString 的标准时间格式(例如周一,2011 年 1 月 24 日 13:11:21 GMT)并返回它。
pointers - 从指针返回的对象
我怎样才能做到这一点??
如果你能帮助我,我会很高兴。
windows - 为什么这个 QString 到 const char* 的转换会在 Windows 上产生一个 Debian 标识符?
我正在尝试将 libssh2 包装在 Qt 中,并具有以下代码:
问题是,用户名和密码无法连接到系统。为什么?
因为,根据调试器,
这些不是我为用户名或密码提供的值。我尝试过 toAscii、toLatin1 并附加(或不附加).data()。尽管如此,我还是得到了这些值,而不是预期值。我在 Windows 上,这就是为什么它更令人不安的原因,因为据我所知,我没有任何东西是在 Debian 或 Ubuntu 上编译的。
这里发生了什么?
c++ - Qt:如何在不区分大小写模式下减去 QString 的两个 QSet
我正在使用 Qt 解决一个逻辑问题。我有两个 QString 的 QSet:
我想从 set2 中减去 set1,所以我使用:
我得到:
但在这种情况下,“bbb”不会从 set2 中删除,尽管 set1 包含此记录。这是因为默认的 QString::contains 方法(它是 QSet::subtract 使用的方法)是区分大小写的。
还有另一个 QString::contains 方法,它接受一个参数来定义区分大小写模式,但我真的不知道如何使用它。
请问有谁知道如何在两个 QString 的 QSet 之间进行不区分大小写的减法?
这是我到目前为止所尝试的:
将两个集合都转换为大写set2 显示在一个列表中,因此如果所有项目都为大写(或都不为小写),这并不奇怪。
扩展 QSet 类并覆盖减法方法我尝试使用 MyStringSet 自定义类扩展此类,但我对 Qt 不太满意,这在我看来相当复杂。
c++ - 基于 Qt 的 addSlashes 版本等效
我刚刚写了一个基于 Qt 的php addSlashes函数,我不会看到任何改进和建议。我打算使用这个函数来填充一个包含数百个insert
查询的文件,更具体地说,我将创建php 数据库转储之类的。