小编Ale*_*ph0的帖子

QTreeView 禁用根节点的显示

在我的项目中,我使用 aQTreeView来显示绘图配置。在顶部,我有一个名为的根节点,PlotConfig其中包含多个绘图窗口。每个绘图窗口包含几个简单的 xy 绘图。

基本上,我有这样的东西:

我的地块配置

我正在使用自己的QAbstractItemModel来显示此绘图配置。一切正常,但根节点PlotConfig确实分散了用户的注意力。

所以我想要这样的东西:

我想要的绘图配置

有没有办法禁止显示根节点?直接在QTreeView或在QAbstractItemModel. 我基本上想要的是QList每个条目都表现得像一棵树。

c++ qt qtreeview qabstractitemmodel

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

如何使用 QTest 模拟拖放操作

为了为小部件中的拖放错误创建测试用例,QTreeView我尝试模拟拖放鼠标移动行为。

我基本上选择了第一个元素QTreeView并希望将其拖放到第三个元素上。QTest::mousePress我通过使用和的组合来做到这一点QTest::mouseMove。最后当然应该有一个QTest::mouseRelease,但我已经无法复制 mousePress 和 mouseMove 了。

这些是重现所需的步骤:

  1. 用户将鼠标移动到第一个项目的中心
  2. 用户按下鼠标左键
  3. 用户按住鼠标左键并将鼠标移动到第三个项目的中心
  4. 用户释放鼠标左键

如果按照描述执行这些操作,我可以看到小QTreeView部件会做出适当的反应,并指示特殊的突出显示和垂直线,以防项目在项目之间移动。

不幸的是,我的自动化测试未能重现这种行为。似乎按QTest::mousePress顺序调用会产生不同的效果。使用一对QTest::mousePressandQTest::mouseMove也是不同的。

这是我的代码:

主程序

#include "TestObject.h"
#include <QTest>

QTEST_MAIN(TestObject)
Run Code Online (Sandbox Code Playgroud)

测试对象.h

#include <QtTest/QtTest>

class TestObject : public QObject
{
    Q_OBJECT

private slots:
    void dragAndDrop();
};
Run Code Online (Sandbox Code Playgroud)

测试对象.cpp

#include "TestObject.h"
#include "TestObject.moc"
#include <QTest>
#include <QTreeView>
#include <QStandardItemModel>
#include <QPropertyAnimation>
#include "MouseMover.h"

void TestObject::dragAndDrop() {
    qDebug() << "Hello";
    QStandardItemModel model;
    QTreeView view;
    view.setModel(&model);
    view.show(); …
Run Code Online (Sandbox Code Playgroud)

qt qtreeview qstandarditemmodel qmouseevent qtest

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

用等距值填充 std::vector&lt;double&gt; 的最简单方法

假设我有价值观double startdouble end和步长double step

填充std::vector<double>从 at 开始startstepsize随着当前值小于递增的值的最简单方法是end什么?

我在问自己,是否有一个 stl 函数使这个任务成为单线任务。

std::vector<double> fill(double start, double end, double step) {
  // Code
}

main() {
  auto ret=fill(0.2, 2.3, 0.2);
  // ret = {0.2, 0.4, 0.6, ... , 2.2}
}
Run Code Online (Sandbox Code Playgroud)

c++ stl stdvector

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

使用 Sphinx 更改 Latex 表格样式

我正在sphinx用来生成我们公司的手册。在我们的传统手册中,我们有某种表格样式,我们希望保留这种样式。

表格样式由具有深绿色背景的表头组成,然后是几行浅绿色背景行,然后是几行白色背景。

Sphinx生成我的 LaTeX 输入文件,然后使用 PdfLatex 将其制作为 PDF。有可能在 LaTeX 表以:raw-role:.

输入 RST 文件:

.. role:: raw-role(raw)
   :format: latex

:raw-role:`\firstRow`   

=== === ===
 A   B   C
=== === ===
1A   1B  1C
2A   2B  2C
3A   3B  3C
4A   4B  4C
=== === ===
Run Code Online (Sandbox Code Playgroud)

将转化为:

\firstRow

\noindent\begin{tabulary}{\linewidth}{|L|L|L|}
\hline
\sphinxstylethead{\relax 
A
\unskip}\relax &\sphinxstylethead{\relax 
B
\unskip}\relax &\sphinxstylethead{\relax 
C
\unskip}\relax \\
\hline
1A
&
1B
&
1C
\\
\hline
2A
&
2B
&
2C
\\
\hline
3A
&
3B …
Run Code Online (Sandbox Code Playgroud)

latex pdflatex python-sphinx pandoc

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

const_cast 的自动类型推导不起作用

在我的工作中,在某些情况下使用const_cast是不可避免的。

现在我必须使用const_cast一些非常复杂的类型,实际上我不想在const_cast<Clutter>表达式中编写所有这些类型的混乱,尤其Clutter是 if 很长。

我的第一个想法是编写const_cast<>(myType),但我的编译器无法推导出 的非常量类型myType。因此,我考虑帮助我的编译器,并设计了以下可以编译的方法。

#include <stdlib.h>
#include <iostream>

int main(int, char**) {
    const int constVar = 6;
    using T = typename std::remove_cv<decltype(constVar)>::type;
    auto& var = const_cast<T&>(constVar);
    var *= 2;
    std::cout << &constVar << " " << &var << "\n"; // Same address!
    std::cout << constVar << " " << var << "\n";
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,程序给了我输出6 12而不是预期的6 6,我真的不明白?

我的方法有什么问题吗?

c++ templates const-cast visual-studio-2015

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

在命名空间中使用自己的类比较std :: vector不会编译

由于找不到比较运算符,因此以下代码无法编译。

#include <vector>
#include <iostream>
#include <string>

namespace Cool {
    struct Person {
        std::string name;
    };
}

bool operator==(const Cool::Person&  p1, const Cool::Person& p2) {
    return p1.name == p2.name;
}

int main(int, char *[])
{
    std::vector<Cool::Person> a{ {"test"} };
    std::vector<Cool::Person> b{ {"test"} };
    bool ok = a == b;
    std::cout << ok << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

经过一些实验,我发现以下代码可以完美编译:

#include <vector>
#include <iostream>
#include <string>

namespace Cool {
    struct Person {
        std::string name;
    };

    bool operator==(const Person&  p1, const Person& p2) {
        return …
Run Code Online (Sandbox Code Playgroud)

c++ stl namespaces operator-overloading stdvector

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

使全局变量在 Robot Framework 侦听器中可访问

在我的一个项目中,我们使用 Robot Framework 和一个特殊的侦听器通过 XRAY 将结果推送到 Jira。

现在,我们想要以 A 或 B 两种不同的模式调用 Robot Framework,并且需要通过 XRay 将不同的标签推送到 Jira。

我不想在调用机器人之前设置一些环境变量,因为它们真的很难跟踪。

使机器人框架的全局变量在机器人框架侦听器中运行可访问的最简单方法是什么。

我只想这样称呼机器人:

robot --listener XRayListener.py --variable Mode:A
Run Code Online (Sandbox Code Playgroud)

如何,我现在可以访问 XRayListener.py 内部的变量 Mode

jira robotframework jira-xray

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

Qt容器类的通用搜索算法

STL提供了各种函数来查找容器类中的元素.Qt 5.5容器类中是否有类似的功能,例如QListQVector

特别是,我正在寻找一个等效的单行,即std::find_if使用Qt容器和Qt算法:

int main(int arg, char** args) {
    std::vector<int> c = { 2,3,4,6,6,15 };
    if (std::find_if(c.begin(), c.end(), [](const int& value) { return value % 5 == 0; }) != c.end()) {
        std::cout << "At least one element divisible by 5." << std::endl;
    } else {
        std::cout << "No element is divisible by 5." << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

元素可被5整除的谓词应该只是作为一个例子.

Qt框架是否提供了这么好的算法?

c++ qt containers stl

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

模板类作为模板参数的默认参数

今天我尝试将模板类传递给模板参数.我的模板类std::map有四个模板参数,但最后两个是默认参数.

我能够得到以下代码来编译:

#include <map>

template<typename K, typename V, typename P, typename A,
    template<typename Key, typename Value, typename Pr= P, typename All=A> typename C>
struct Map
{
    C<K,V,P,A> key;
};

int main(int argc, char**args) {
    // That is so annoying!!!
    Map<std::string, int, std::less<std::string>, std::map<std::string, int>::allocator_type, std::map> t;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不想一直传递最后两个参数.这真是太多了.我如何在这里使用一些默认模板参数?

c++ templates class-template

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

如果参数不是引用,如何防止编译通过的lambda

在我的一个项目中,我正在使用一个小的实用程序函数,该函数带有一个Message结构和一个lambda函数,用于修改此消息结构。

现在,我无意间通过了一个lambda,而没有必要的引用&。它可以完美地编译,但没有提供所需的输出。

对于我来说,应该有以下两种行为之一:

  1. 忘记写了auto&,但是auto应该导致编译错误
  2. 写作auto应该被解释为auto&

是否可以防止在丢失的情况下编译,&甚至更好地将其解释autoauto&自动?

#include <iostream>
#include <functional>
#include <boost/variant.hpp>

struct Message {
    int x;
    int y;
};

void changeMessage(Message& m, const std::function<void(Message&)>& messageModifier) {
    std::cout << "Message before:" << m.x << " " << m.y << "\n";
    messageModifier(m);
    std::cout << "Message after:" << m.x << " " << m.y << "\n";
}

int main(int, char**) {
    {
        std::function<void(int&)> f = [](int&) …
Run Code Online (Sandbox Code Playgroud)

c++ lambda closures std-function

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