小编Vla*_*hov的帖子

在 QChartView 上实现选择

我想实现基于QChartQChartView的图表选择。这些类的家族有一个很大的优势 -易于使用 openGL动画,例如:

QLineSeries *series = new QLineSeries();
series->setUseOpenGL(true); // <==

QChart *chart = new QChart();
chart->addSeries(series);
chart->setAnimationOptions(QChart::AllAnimations); // <==

QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);    
Run Code Online (Sandbox Code Playgroud)

QChartView类提供了有用的缩放功能- QChartView :: setRubberBand()

chartView->setRubberBand(QChartView::RectangleRubberBand);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

主要问题是橡皮筋只能用于缩放,但我需要实现它用于不缩放的水平选择,因为该功能通常在音频编辑器中实现: 在此处输入图片说明

现在,当我继承 QChartView 时,我可以在选择后禁用缩放:

class ChartView : public QChartView
...
bool m_drawRubberBand;
QRubberBand m_rubberBand;
...

ChartView::ChartView(QChart *chart, QWidget *parent) 
    : QChartView(chart, parent)
{
    setRubberBand(QChartView::HorizontalRubberBand);
}
...

// Just copy-paste from the Qt 5 sources - file \Src\qtcharts\src\charts\qchartview.cpp:
/*! …
Run Code Online (Sandbox Code Playgroud)

plot qt qt5 qtcharts qchart

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

无需 BOM 即可将源代码转换为 UTF-8

我尝试将所有源文件从目标文件夹转换为 UTF-8(无 BOM)编码。我使用以下 PowerShell 脚本:

$MyPath = "D:\my projects\etc\"
Get-ChildItem $MyPath\* -Include *.h, *.cpp, *.c | Foreach-Object {
    $content = Get-Content $_.FullName  
    $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
    [System.IO.File]::WriteAllLines($_.FullName, $content, $Utf8NoBomEncoding)    
}
cmd /c pause | out-null
Run Code Online (Sandbox Code Playgroud)

如果文件已经不是UTF-8,它可以正常工作。但是,如果某个文件已经在 UTF-8 no-BOM 中,则所有国家符号都会转换为未知符号(例如,如果我再次运行脚本)。如何更改脚本以解决问题?

powershell utf-8 character-encoding

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

指定线程的std :: async模拟

我需要处理几个对象,每个操作可能需要很长时间.

处理无法放在GUI(主)线程中,我在其中启动它.

我需要做的所有的一些对象在通信上的异步操作,类似的东西std::asyncstd::futureQtConcurrent::run()在我的主要框架(Qt的5),用QFuture等,但它不提供线程的选择.我总是需要在一个额外的线程中使用选定的对象(objects == devices),

因为:

  1. 我需要制作一个通用的解决方案,并且不希望每个类都是线程安全的
  2. 例如,即使为QSerialPort创建一个线程安全的容器,Qt中的串口也无法在多个线程中访问:

注意:串行端口始终以独占访问权限打开(即,没有其他进程或线程可以访问已打开的串行端口).

  1. 通常,与设备的通信包括发送命令和接收答案.我想在发送请求的地方准确处理每个答案,并且不想使用仅事件驱动的逻辑.

所以,我的问题.

如何实现该功能?

MyFuture<T> fut = myAsyncStart(func, &specificLiveThread);
Run Code Online (Sandbox Code Playgroud)

一个活动线程必须多次传递.

c++ qt multithreading asynchronous future

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

静态函数和方法内静态变量初始化的调用计数

我有counter.h

static int count() {
    static int counter = 0; // called anew in each translation unit
    return ++counter;
}
Run Code Online (Sandbox Code Playgroud)

Singleton.h

class Singleton
{
public:
    Singleton(const Singleton& other) = delete;
    Singleton& operator = (const Singleton& other) = delete;

    static Singleton& instance()
    {
        static Singleton ret; // called only once
        return ret;
    }

private:
    Singleton() { std::cout << "call\n"; }
};
Run Code Online (Sandbox Code Playgroud)

foo.cpp

void foo()
{
    count();
    auto& db = Singleton::instance();
}
Run Code Online (Sandbox Code Playgroud)

动物园.cpp

void zoo() …
Run Code Online (Sandbox Code Playgroud)

c++

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