在我的项目中,我使用 aQTreeView来显示绘图配置。在顶部,我有一个名为的根节点,PlotConfig其中包含多个绘图窗口。每个绘图窗口包含几个简单的 xy 绘图。
基本上,我有这样的东西:
我正在使用自己的QAbstractItemModel来显示此绘图配置。一切正常,但根节点PlotConfig确实分散了用户的注意力。
所以我想要这样的东西:
有没有办法禁止显示根节点?直接在QTreeView或在QAbstractItemModel. 我基本上想要的是QList每个条目都表现得像一棵树。
为了为小部件中的拖放错误创建测试用例,QTreeView我尝试模拟拖放鼠标移动行为。
我基本上选择了第一个元素QTreeView并希望将其拖放到第三个元素上。QTest::mousePress我通过使用和的组合来做到这一点QTest::mouseMove。最后当然应该有一个QTest::mouseRelease,但我已经无法复制 mousePress 和 mouseMove 了。
这些是重现所需的步骤:
如果按照描述执行这些操作,我可以看到小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) 假设我有价值观double start,double end和步长double step。
填充std::vector<double>从 at 开始start并stepsize随着当前值小于递增的值的最简单方法是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) 我正在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) 在我的工作中,在某些情况下使用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,我真的不明白?
我的方法有什么问题吗?
由于找不到比较运算符,因此以下代码无法编译。
#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) 在我的一个项目中,我们使用 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
STL提供了各种函数来查找容器类中的元素.Qt 5.5容器类中是否有类似的功能,例如QList或QVector?
特别是,我正在寻找一个等效的单行,即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框架是否提供了这么好的算法?
今天我尝试将模板类传递给模板参数.我的模板类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)
不幸的是,我不想一直传递最后两个参数.这真是太多了.我如何在这里使用一些默认模板参数?
在我的一个项目中,我正在使用一个小的实用程序函数,该函数带有一个Message结构和一个lambda函数,用于修改此消息结构。
现在,我无意间通过了一个lambda,而没有必要的引用&。它可以完美地编译,但没有提供所需的输出。
对于我来说,应该有以下两种行为之一:
auto&,但是auto应该导致编译错误auto应该被解释为auto&。是否可以防止在丢失的情况下编译,&甚至更好地将其解释auto为auto&自动?
#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++ ×7
qt ×3
stl ×3
qtreeview ×2
stdvector ×2
templates ×2
closures ×1
const-cast ×1
containers ×1
jira ×1
jira-xray ×1
lambda ×1
latex ×1
namespaces ×1
pandoc ×1
pdflatex ×1
qmouseevent ×1
qtest ×1
std-function ×1