小编tac*_*ach的帖子

关于Qt错误输入的弹出通知

我有一个对话框,例如QLineEdit,我想通知用户,当文本中的文本QLineEdit是错误的,为什么它是错误的.我想在旁边显示一个小弹出窗口QLineEdit,例如"此字符串没有元音".我尝试过QToolTip::showText,但这只是临时弹出窗口,在鼠标移动后会消失.我当然不想要任何一种QMessageBox.这样做的正确方法是什么?

validation qt popup

9
推荐指数
2
解决办法
2408
查看次数

高效积累

假设我有字符串向量,我想通过std :: accumulate连接它们.

如果我使用以下代码:

std::vector<std::string> foo{"foo","bar"};
string res=""; 
res=std::accumulate(foo.begin(),foo.end(),res,
  [](string &rs,string &arg){ return rs+arg; });
Run Code Online (Sandbox Code Playgroud)

我可以肯定会有临时对象构造.

这个答案中,他们说std :: accumulate的效果是这样指定的:

通过初始化累加器acc初始值init计算其结果,然后按顺序对[= first,last]范围内的每个迭代器i用acc = acc +*i或acc = binary_op(acc,*i)修改它.

所以我想知道这样做的正确方法是什么,以避免不必要的临时对象构造.

一个想法是以这种方式改变lambda:

[](string &rs,string &arg){ rs+=arg; return rs; }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我认为我强制有效串联字符串并帮助编译器(我知道我不应该)省略不必要的副本,因为这应该等同于(伪代码):

accum = [](& accum,& arg){ ...; return accum; }
Run Code Online (Sandbox Code Playgroud)

因此

accum = & accum;
Run Code Online (Sandbox Code Playgroud)

另一个想法是使用

accum = [](& accum,& arg){ ...; return std::move(accum); }
Run Code Online (Sandbox Code Playgroud)

但这可能会导致类似于:

accum = std::move(& accum);
Run Code Online (Sandbox Code Playgroud)

这看起来很可疑.

写这个的正确方法是什么,以尽量减少不必要的临时对象创建的风险?我不仅对std :: string感兴趣,我很乐意有一个解决方案,这可能适用于任何具有复制和移动构造函数/赋值的对象.

c++ algorithm rvalue-reference accumulate c++11

7
推荐指数
3
解决办法
1586
查看次数

在 Phabricator 中更改用户的密码

假设我在 Phabricator 中有一个用户,我需要更改他的密码(例如,电子邮件系统出现故障,我需要立即设置密码)。

我怎样才能做到这一点?

change-password phabricator

6
推荐指数
2
解决办法
3300
查看次数

如何在R中制作和排序元组数组

我有几个元组,我需要根据第二项对它们进行排序.这是一个伪代码:

events <- vector(mode = "list", length = 5)
events[[1]] <- c(3,1.4)
events[[2]] <- c(2,1.8)
events[[3]] <- c(8,5.3)
events[[4]] <- c(6,1.4)
events[[5]] <- c(6,5.4)

#sort according to second item in tuple
sort(events)
events
Run Code Online (Sandbox Code Playgroud)

我想得到一个像这样的结果:

[c(3,1.4),c(6,1.4),c(2,1.8),c(8,5.3),c(6,5.4)]
Run Code Online (Sandbox Code Playgroud)

arrays sorting tuples r

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

获取没有特定祖先xml xpath的节点

我想有xpath,它获取没有祖先的节点,祖先是特定节点的第一个后代.

我们假设我们有这样的xml文档:

<a>
  <b>This node</b>
  <c>
    <a>
      <b>not this</b>
      <g>
        <b>not this</b>
      </g>
    </a>
    <a>
      <b>This node</b>
      <c/>
    </a>
  </c>
</a>


<a>
  <c>
    <a>
      <b>not this</b>
    </a>
    <a>
      <b>This node</b> 
    </a>
    <a>
      <b>This node</b> 
    </a>
    <a>
      <b>This node</b> 
    </a>
  </c>
</a>


<d>
  <b>This node</b>
</d>
Run Code Online (Sandbox Code Playgroud)

我想选择文档中没有作为祖先节点的所有b节点// a/c/a [1].

xml xpath ancestor

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

来自具有大小的 char * 缓冲区的双向迭代器

我似乎无法找到一个简单的解决方案,即如何从char *bufferwith defined获取双向迭代器bufferSize。我不想将缓冲区复制到std::string(太昂贵),我只想像std_whatever::buffer_wrapper myWrappedBuffer(myBuffer, mySize);然后在函数中使用myWrappedBuffer.begin()和。最简单的方法是什么?我真的不想自己实现迭代器。我知道有,也许有,但我不想为此使用 boost,也不能使用 c++17。myWrappedBuffer.end()<algorithm>boost::string_refstd::string_view

c++ string buffer iterator

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

如何对 QML Row 的子级重新排序(使用拖放)?

假设我有一个 QML Row,其中有一些子对象(不一定是同一类型)。我希望能够随意重新排序。额外的好处是,能够为用户实现拖放行为。这是一个代码示例,其中Row包含我想重新排序的不同组件:

import QtQuick 2.5
import QtQuick.Controls 1.4


ApplicationWindow {
    visible: true
    width: 300
    height: 300

    Component {
        id: rect
        Rectangle {
            color: "blue"
        }
    }

    Component {
        id: rectWithText

        Rectangle {
            property alias text: txt.text
            color: "red"
            Text {
                id: txt
            }
        }
    }

    Row {
        id: r
        Component.onCompleted: {
            rect.createObject(r,{"width": 60,"height":40})
            rectWithText.createObject(r,{"width": 100,"height":40,text:"foo"})
            rect.createObject(r,{"width": 40,"height":40})
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在QtWidgets中,有一些函数layout->removeWidget(widget),例如,layout->insertWidget(index,widget)等等,但在QML中似乎缺少它们。

我发现了一些使用ListView/GridView和模型/委托方法的示例,但它们通常无法处理不同的组件,因此它们作为Row.

有没有办法在 QML 中做到这一点,还是我运气不好?

drag-and-drop qml qt5 qtquick2

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