我正在运行 CentOS 6.4 并且需要更高版本的 C++ 编译器来构建我的开发工具(在本例中为 Qt Creator)。
我不清楚使用 devtools 的含义,我希望有人能解释一下。
我需要从具有典型结构的 ini 文件中检索键的值:
[abcd]
key1=a
key2=b
[efgh]
key1=c
key2=d
[hijk]
key1=e
key2=f
Run Code Online (Sandbox Code Playgroud)
关键名称在不同的部分中重复,并且部分的命名/顺序没有一致。我怎么能从 efgh 中找到 key1?如果我 grep 然后我会找到所有的 key1(而且我不知道这些部分的顺序)。
我怀疑 sed 或 awk 可以做到这一点,但我找不到它...
我正在构建我的第一个Angular 4应用程序,使用ng-bootstrap(Bootstrap 4 for Angular) - 不使用常规Boostrap
ng-bootstrap网站(https://ng-bootstrap.github.io/#/components/accordion/api)没有列出导航栏的组件(就像在Bootstrap 3或常规bootstrap 4中那样).这是否意味着我必须从下拉菜单/按钮构建菜单?或者我必须将常规的Bootstrap 4与ng-bootstrap混合使用?
我尝试在html中创建这个菜单但它不会在浏览器中呈现(只是一个品牌"MyWebSiteName"和我的屏幕上的小灰盒,没有导航)
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">MyWebSiteName</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">Page 1 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Page 1-1</a></li>
<li><a href="#">Page 1-2</a></li>
<li><a href="#">Page 1-3</a></li>
</ul>
</li>
<li><a href="#">Page 2</a></li>
<li><a href="#">Page 3</a></li>
</ul>
<ul class="nav navbar-nav navbar-right"> …Run Code Online (Sandbox Code Playgroud) 我有一个充满动态创建对象的Qlist。在终止程序之前,我先调用myqlist.clear()
我的问题是:这还会删除(释放)列表中包含的对象吗?Valgrind给了我一些丢失的块,我想知道我是否误解了qlist clear方法的工作方式。
或者,我是否需要遍历qlist并删除每个对象?
更新:我可以确认mylist.erase(iterator)正在从列表中删除该项目,但没有释放动态分配的对象。(该对象是一个动态实例化的类)。很奇怪!我从Qlist切换到QLinkedList,但结果相同。记住,我的QLinkedList是QLinkedList <myclass>而不是QLinkedList <* myclass>
这是实际的代码,以防有人发现我在做错什么:
// Here I define a couple important items. Note that AMISendMessageFormat is a class
typedef QLinkedList<AMISendMessageFormat> TSentMessageQueue;
TSentMessageQueue m_sentMessageQueue;
// Here I create the message and append to my QLinkedList
AMISendMessageFormat *newMessage = new AMISendMessageFormat(messageToSend);
m_sentMessageQueue.append(*newMessage);
// Here I delete
for (TSentMessageQueue::Iterator sMessagePtr = m_sentMessageQueue.begin(); sMessagePtr != m_sentMessageQueue.end(); )
{
sMessagePtr = m_sentMessageQueue.erase(sMessagePtr);
qDebug() << "Sent size after erase: " << m_sentMessageQueue.size(); // Confirmed linked list is shrinking in size
} …Run Code Online (Sandbox Code Playgroud) 我需要使用Qt 5.7 / C ++在Linux下更改文件的所有者和组。我发现了QFileInfo::ownerID和QFileInfo::groupID吸气剂,但这些值似乎没有塞特尔。
我需要相当于Qt的chown。
有没有一种使用Qt函数设置这些值的方法?
我正在尝试向输入添加自定义验证器,但是当我这样做时,它会触发 ExpressionChangedAfterItHasBeenCheckedError 错误,指出某些内容从 TRUE 更改为 FALSE。
我将问题追溯到以下行:
ngOnInit(): void {
this.ipv4Fields.addControl('gateway', new FormControl('', [TabValidator.ipaddress()]));
}
Run Code Online (Sandbox Code Playgroud)
如果我删除 TabValidator.ipaddress() 那么错误就会消失。同样,如果我的验证器强制返回“null”,那么错误就会消失。我的验证器如下:
private static _ipaddress(address: string): any {
console.log('checking ip address: '+address+' valid: '+ip.isV4Format(address)+' is null: '+(address === null ? 'yes' : 'no'));
if (!ip.isV4Format(address)) { return { 'wrongFormat': true }; }
console.log('returning null');
return null;
}
public static ipaddress(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } => {
console.log('validator returning: '+TabValidator._ipaddress(control.value));
return TabValidator._ipaddress(control.value);
};
}
Run Code Online (Sandbox Code Playgroud)
从控制台日志看来,验证器每次都返回相同的值。
有人可以解释这里出了什么问题吗?我无法解释什么变量从“真”变为“假”,因为上面的行中没有涉及布尔值。验证器如何返回不同的值而不出现在我的控制台日志中?
我读了一个关于不在 ngOnInit 中做事的 …
由于与另一个项目(共享此代码)不兼容,我试图从 git 检索旧提交。git 存储库是 OpenZWave。
我在 SO 上找到了一个帖子,说要发出命令:
git checkout @{14.days.ago}
Run Code Online (Sandbox Code Playgroud)
但这导致:
warning: Log for '' only goes back to Wed, 23 May 2018 08:02:05 -0400.
HEAD is now at 77a05ed... Update hs-ms100plus.xml
Run Code Online (Sandbox Code Playgroud)
我不知道出了什么问题 - 显然有比今天更早的提交。这个命令有什么问题?(该命令是否会导致我的克隆被 14 天前的代码替换)
我在 Qt Creator 中收到此警告:
不要创建临时 QRegularExpression 对象。使用静态 QRegularExpression 对象代替 [clazy-use-static-qregularexpression]
这是关于下面的代码片段:
QRegularExpression re("SEARCHING...",QRegularExpression::CaseInsensitiveOption);
QRegularExpressionMatch match = re.match(frame);
if (match.hasMatch()) {
Run Code Online (Sandbox Code Playgroud)
这对我来说并不明显,我应该如何使用QRegularExpression?
我是Qt的新手 - 但这可能是一个非常基本的c ++问题.我有一个返回QString的简单函数:
QString testclass::myfunc(int i)
{
QString result;
switch (i) {
case 1: result = "one"; break;
case 2: result = "two"; break;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
这样安全吗?c编译器是否确保返回值在内存中保留足够长的时间以供调用函数使用?(或者这会冒内存损坏的风险).如果是后者,返回QString的正确方法是什么?(结果var必须是静态的吗?结果必须是testclass的成员吗?)
QString包含常量是否重要?(id case 3分配给随机字符串的结果)
如果myfunc是一个静态方法,我想从不同的线程调用怎么办?我是否必须通过引用传入额外的Qstring以确保每个调用者获得自己的变量(并返回void)?
这是实际的功能(清理了一下) - 并注意到这个功能是STATIC,以防有所不同:
QString L::toString(const L::editions &level)
{
QString levelStr;
switch (level) {
case L::one:
levelStr = "one";
break;
case L::two:
levelStr = "two";
break;
case L::three:
levelStr = "thre";
break;
default:
levelStr = "Internal Error";
break;
}
return levelStr;
}
Run Code Online (Sandbox Code Playgroud)
然而valgrind抱怨(第121行是'levelStr ="one";')
34 bytes in …Run Code Online (Sandbox Code Playgroud) 我正在Linux中编写一个C++程序,需要使用用C编写的旧库.库使用C结构将信息传入和传出函数,这些结构是字节对齐的(无填充).
我的理解是C++中的结构实际上是一个对象,而C中的结构只是一个内存块,被分成可单独寻址的部分.
如何在C++中创建C样式结构以传递给库?(我不能传递一个对象)
c++ ×4
qt ×4
angular ×2
linux ×2
awk ×1
c ×1
clang ×1
devtoolset ×1
file ×1
function ×1
git ×1
git-checkout ×1
ini ×1
libraries ×1
libstdc++ ×1
memory ×1
ng-bootstrap ×1
ngoninit ×1
qfileinfo ×1
qlist ×1
qstring ×1
qt-creator ×1
redhat-dts ×1
return-value ×1
sed ×1
struct ×1
validation ×1