我有一个这样的组件:
import QtQuick 2.15
Item {
id: root
property double value: 0.0
property int core: 1
property color progressBarColor: "black"
property color minMaxTextColor: "black"
property int fontSize: height - 6
//....
}
Run Code Online (Sandbox Code Playgroud)
现在我认为让一些属性成为必需的是一个好主意,因为它们应该在使用组件时声明。所以我改成这样:
import QtQuick 2.15
Item {
id: root
required property double value
required property int core
property color progressBarColor: "black"
property color minMaxTextColor: "black"
property int fontSize: height - 6
//....
}
Run Code Online (Sandbox Code Playgroud)
该组件在转发器中被调用,如下所示:
SystemInformation{
id: sysinfo
}
Column{
id: displayColumn
Repeater{
model: sysinfo.coreUtilizationsInPercent.length
CoreUtilizationDisplay{
width: root.elementWidth
height: root.elementHeight …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 OCR 从图片中提取数据。我在 C++ 中使用 Tesseract API 来实现这一点。
原图是这样的:
现在对我来说重要的数据是这样的:
然而,无论我尝试什么,永远不会识别标记的蓝线。
用tesseract分析图片的代码是这样的:
std::string readFromFile(const std::string& filename)
{
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
api->SetPageSegMode(tesseract::PSM_AUTO);
if (api->Init("folder_to_tessdata", "deu+eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
// Open input image with leptonica library
Pix *image = pixRead(filename.c_str());
api->SetImage(image);
// Get OCR result
char *outText = api->GetUTF8Text();
std::string result{ outText };
api->End();
delete[] outText;
pixDestroy(&image);
return result;
}
Run Code Online (Sandbox Code Playgroud)
我试图通过预处理图像来提高准确性,就像这个问题中建议的那样:图像处理以提高 tesseract OCR 准确性
预处理代码:
cv::Mat image;
image = cv::imread(filename, cv::IMREAD_COLOR);
cv::resize(image, image, cv::Size{}, …Run Code Online (Sandbox Code Playgroud) Visual Studio 2017 是否有任何插件可以使用 C++ 计算单元测试代码覆盖率?
我只找到OpenCppCoverage: https://marketplace.visualstudio.com/items? itemName=OpenCppCoverage.OpenCppCoveragePlugin
但它似乎已经过时/不起作用。
除此之外,似乎只有 .Net 语言的代码覆盖率插件,但没有 C++
还有其他选择吗(除了升级到 MSVC Enterprise 之外)
我有以下问题:
我收到main.qml这些错误。虽然我可以在代码中完美地使用这些类型。看起来这只是一个智能感知问题。

这些类型注册于main.cpp:

这些类在文件夹中定义include:
我的文件夹结构如下所示:

我需要QML_IMPORT_PATH在 pro 文件中修改吗?我添加了 src 和 include 文件夹,但它不起作用:
QML_IMPORT_PATH += src
QML_IMPORT_PATH += include
Run Code Online (Sandbox Code Playgroud)
代码本身运行良好。这只是一个智能感知问题。
我有两个不同的对象:
struct TypeA {
std::size_t no;
std::string data;
std::string data2;
};
struct TypeB {
std::size_t no;
std::string data;
std::string data2;
std::string data3;
};
Run Code Online (Sandbox Code Playgroud)
它们存储在一个std::vector与std::variant
std::vector<std::variant< TypeA, TypeB>> ab;
Run Code Online (Sandbox Code Playgroud)
现在我想删除所有元素是成员no = 0.
如果没有std::variant包含的向量,TypeA我会这样做:
ab.erase(std::remove_if(ab.begin(), ab.end(),
[](const TypeA& a) { return a.no == 0; }), ab.end());
Run Code Online (Sandbox Code Playgroud)
但如何纳入std::variant?我试图想出一些东西,std::visit但我不能在谓词中添加它,std::remove_if或者我可以吗?
我想在std :: variant中获取活动值,而不知道哪个是活动的.我以为我可以写一个模板访问者并使用std :: visit但它不起作用.
#include <variant>
#include <string>
#include <iostream>
struct Visit_configuration {
template<typename Data_type>
Data_type operator()(Data_type& t) const
{
return t;
}
};
int main()
{
std::variant<int, std::string> v;
v = "hello";
std::cout << std::visit(Visit_configuration(), v); // expect "hello"
std::cin.get();
}
Run Code Online (Sandbox Code Playgroud)
MSVC不编译和抛出:
错误C2338:visit()要求所有潜在调用的结果具有相同的类型和值类别(N4741 23.7.7 [variant.visit]/2).
注意:请参阅正在编译的函数模板实例化'int std :: visit&,0>(_ Callable &&,std :: variant&)'的引用
那么如何解决这个问题呢?
编辑:我想使用获得的值也许也适用于其他因此将cout放在模板中并不是我想要的.
我有这样的代码,它为 Qt 4 编写了一个 mdi 窗口:
class MdiWindow : public QMainWindow
{
Q_OBJECT
public:
MdiWindow( QWidget *parent = nullptr)
...
private:
QWorkspace* workspace
QSignalMapper* mapper
}
MdiWindow::MdiWindow( QWidget *parent ) : QMainWindow( parent )
{
...
workspace = new QWorkspace;
setCentralWidget( workspace );
connect( workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(enableActions()));
mapper = new QSignalMapper( this );
connect( mapper, SIGNAL(mapped(QWidget*)), workspace, SLOT(setActiveWindow(QWidget*)) );
....
}
Run Code Online (Sandbox Code Playgroud)
根据 QT 文档QWorkspace应该替换为QMdiArea.
我这样做了并编写了第一个连接,如下所示:
connect(workspace, &QMdiArea::subWindowActivated,
this, &MdiWindow::enableActions);
Run Code Online (Sandbox Code Playgroud)
但那QSignalMapper也被弃用了呢?
那么我该如何更新这一行:
mapper …Run Code Online (Sandbox Code Playgroud) 我想编译当前工作区文件夹中的活动文件。
用C ++ 11的文件没有问题,我只是打运行- >开始调试,右launch.json和tasks.json生成。
但是,对于包含 C++17 代码的文件,我遇到了麻烦。
我认为-std=c++17在tasks.json使用 C++17 调试时添加标志会编译,但它不起作用。
这里的配置文件:
启动文件
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable …Run Code Online (Sandbox Code Playgroud)