小编Adr*_*ire的帖子

在提供`T = std :: complex <Q>`时如何避免嵌入`std :: complex`?

对于多项式方程求解器,将其模板化以使任何类型可用是很好的:

template <class number, int degree>
class PolynomialEquation
{
public:

private:
    array<number, degree+1> myEquation;
    array<complex<number>, degree> equationResult;
};
Run Code Online (Sandbox Code Playgroud)

例如,这允许double在ℝ中用于输入,并且结果std::complex<double>在ℂ中(我们知道从2级及以上,方程的解通常落入ℂ,例如:x ^ 2 + 1).

但是,等式的输入也可以是a std::complex.在这种情况下,类型myEquation应该是复杂的,但equationResult不应该是a std::complex<complex<T>>,而只是正常的复数类型T.

问题:

如何在提供方程时使类型equationResult成为子类型?std::complexstd::complex

是否有std::is_floating_point类似std :: is_complex_number 的等价物?

c++ templates complex-numbers c++11

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

Qt中某些小部件切换“windowFlags”后如何恢复tabOrder?

语境:

对于自定义小部件,类似于菜单,当空间不足时,我在“下拉”框架内放置一些内容:

在此输入图像描述

对于此下拉功能,我将这些按钮的框架设置为frame.setWindowFlags(Qt::Popup | Qt::FramelessWindowHint);. 这工作得很好,只是它扰乱了制表顺序。

小部件的结构如下所示:

MenuWidget
 |- Tab1
     |- Group_<without_name>
         ...
     |- Group_File
         ...
     |- Group_Export
         |-Frame (can be either standard sub-widget, or a popup widgets)
             |- Button 1
             |- Button 2
                 ....
Run Code Online (Sandbox Code Playgroud)

您可以在那里查看当前的 WIP: https: //github.com/Escain/QTopMenu


我将问题简化为以下代码,该代码在开始时具有正确的制表顺序,并且在我设置Qt::Popup并返回到Qt::Widget. 任何恢复正确的制表顺序的尝试都会失败。

设置前Qt::Popup

在此输入图像描述

设置Qt::Popup和设置后Qt::Widget

在此输入图像描述


这是重现该问题的最小示例。
免责声明:这不是生产代码,只是旨在重现相同问题的快速完成的代码。

#include <QApplication>
#include <QDebug>
#include <QWidget>
#include <QPushButton>

class TestWidget: public QWidget
{
    Q_OBJECT
public:
    explicit TestWidget( QWidget* parent=nullptr)
        : QWidget(parent)
        , frame(this) …
Run Code Online (Sandbox Code Playgroud)

c++ qt focus drop-down-menu

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

如何在Javascript中编辑PDF?

基于我的Google和stackoverflow搜索,我猜测没有用于此目的的库.

目标是:在我的服务器上存储一些空白表单.然后将这些呈现给用户,用户使用Javascript在浏览器中编辑表单并将表单提交回服务器.

客户希望重用旧系统的部分(表单),用户可以在其中下载可编辑的PDF,编辑它,然后通过电子邮件将其发送给秘书.我们的用户不是非常精通计算机,很多人都没有意识到他们需要通过电子邮件发回表单,假设表单在保存本地更改(或其他内容)时以某种方式提交.

我还没有看过表格,所以我无法评估替代品的可行性.

javascript pdf

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

如何将makefile包含到其他makefile中?

我有一些C++类,每个都有自己的文件夹和makefile,test.cpp用于测试目的等等.

Main folder
 |-> Class1 folder
 |-> Class2 folder
      |-> Class2.1 folder
 |-> Class2 folder
Run Code Online (Sandbox Code Playgroud)

我有一个主要项目,必须包括这些类.我试图将所有子makefile包含在主makefile中.

我尝试过"INCLUDE POO/makefile",但这个解决方案有两个问题:

  • 子makefile的路径不正确,因此找不到文件("没有规则来构建目标'Vector3D.cpp'").
  • "test.cpp"文件被覆盖,可能是因为路径问题.("警告:覆盖目标的配方...")

我想所有makefile独立,所以我可以复制/通过类文件夹到一个新项目,它仍然有效,或者我可以单独执行makefile而不更改它.

所以问题是:如何将(正确)makefile包含到其他makefile中?

例如,仅用于测试目的.

主要makefile(简化)

include Vector3D/makefile
include Color/makefile

CPP      = g++
CXXFLAGS = $(CXXINCS) -Wall -O0

all: main

main: main.o Vector3D.o Color.o
    $(CPP) main.o Vector3D.o Color.o -o main

main.o: main.cpp
    $(CPP) -c main.cpp -o main.o $(CXXFLAGS)
Run Code Online (Sandbox Code Playgroud)

子makefile示例(简化)

#Vector3D
CPP      = g++
CXXFLAGS = $(CXXINCS) -Wall -O0


all: test

test: Vector3D.o test.o
    $(CPP) Vector3D.o test.o -o test

Vector3D/test.o: test.cpp
    $(CPP) -c …
Run Code Online (Sandbox Code Playgroud)

c++ makefile g++

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

仅小部件一部分的事件透明度

该软件显示 3 个小部件:

  • 主窗口
  • 内容小部件,覆盖大部分主窗口
  • 自定义小部件,覆盖主窗口和内容小部件的一部分。

自定义小部件有一个部分(定义为 a QRect)需要为Event-opaque,而周围区域必须为Event-transparent

我尝试过:

setAttribute(Qt::WA_TransparentForMouseEvents);
Run Code Online (Sandbox Code Playgroud)

但所有自定义子小部件也变得透明。

我也尝试过setMask,但自定义小部件无法在周围区域上绘制。

如何实现部分事件透明?

示例(它没有解释完整的问题,只是添加一个测试解决方案的基础):

主要.cpp:

#include "transparentwidget.hpp"
#include "normalwidget.hpp"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // Main Window
    NormalWidget window;
    window.resize(500,500);
    window.setObjectName("window");
    window.setStyleSheet("background-color: rgba(0,0,128,128); ");

    // Content window
    NormalWidget content(&window);
    content.setObjectName("content");
    content.resize(400, 400);
    content.move(0,0);
    content.setStyleSheet("background-color: rgba(128,0,0,128);");

    TransparentWidget custom(&window);
    custom.setObjectName("custom");
    custom.resize(500, 200);
    custom.setStyleSheet("background-color:rgba(0,128,0,128);");

    window.show();

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

透明小部件.hpp:

#ifndef TRANSPARENTWIDGET_H
#define TRANSPARENTWIDGET_H

#include <QWidget>
#include <QStyleOption>
#include <QPainter> …
Run Code Online (Sandbox Code Playgroud)

c++ events qt widget

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

在QStyle绘制函数中保存QWidget动画的状态在哪里?

一个QWidget作为一个paintEvent函数,它是负责他的绘画.要正确实现此功能,QStyle对象用于表示每个组件,QStyleOption对象用于保存控件的状态.

例如:一个自定义ScrollBar工具paintEvent,drawComplexControl用" CC_ScrollBar" 选项调用.然后,QProxyStyle可以扩展以更改滚动条的外观.

当用户悬停滑块时,paintEvent调用它会应用新的"悬停"外观,该状态保存在QStyleOption::state.但是对于现在的一天小部件,这个状态不应该立即更新,而是在大约100-500毫秒的平滑过渡(动画).为了使用此转换为窗口小部件设置动画,需要一些值,例如滚动的每个部分的动画的当前状态(a qreal/ QColor?):顶部箭头,底部箭头或滑块.


在这个"漫长"的介绍之后,我的问题来了:

是否有某个变量来设置此动画的状态?我可以QStyleOption使用这个新值进行扩展,但是当前的实现似乎已经包含了动画,我无法找到保存此转换状态的位置.

我正在寻找一个规范的答案.

注意:为了避免"可能重复...",即使稍微相关,这也不是关于如何使用QAnimation或创建自定义小部件的问题.

c++ qt qwidget transitions qstyle

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

在 QWidget 中按需显示系统菜单

通常,右键单击窗口的标题栏会system-menu弹出一个窗口。

在此输入图像描述

我的问题是:如何强制此菜单按需弹出:例如单击按钮时。

QApplication a(argc, argv);
QWidget window;
window.resize(200,100);
QPushButton button(&window);
button.connect( &button, &QPushButton::clicked, [&window]()
{
    // here show the window system menu:
    // window.showSystemMenu(QPoint(0,0));
});
window.show();

a.exec();
Run Code Online (Sandbox Code Playgroud)

注意:要将此信号/槽与 lambda 一起使用,需要 C++11。但纯 C++03 也是有效的。

编辑:

实际上,我将此菜单创建为 QMenu,其中填充了与默认 Windows 菜单相同的内容。这适用于任何平台,但内容可能与预期不同。

c++ qt

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

为什么 QXmlQuery 似乎在结果中添加了“\n”?(以及如何解决?)

编写一些代码从 XML 中提取一些值,XPath 的结果似乎添加\n在内容之后。

#include <QCoreApplication>
#include <QXmlQuery>
#include <QString>
#include <QDebug>

auto main(int argn, char* argc[])->int
{
    QCoreApplication app(argn, argc);

    QString replyContent="<Root isOk='ok'/>";

    QXmlQuery query;
    query.setFocus(replyContent);
    query.setQuery("string(//@isOk)");

    // Attribute seem to add \n
    QString queryResult;    
    if (query.evaluateTo(&queryResult))
    {
        qDebug() << queryResult;              // Where this \n come from?
        qDebug() << queryResult.size();       // Why 3? shouldn't be 2?
    }
}
Run Code Online (Sandbox Code Playgroud)

预期结果:

“好的”
2

给出的结果:

“好的\n”
3

这显然有一些我想避免的副作用。

为什么要\n添加这个?以及如何解决呢?

c++ qt xpath qxmlquery

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

如何从OpenCL访问OpenCV UMat(gpu)缓冲区?

介绍:

目的是使用OpenCV捕获视频,并将其用作OpenCL程序的输入。两者的传输都必须尽可能高效(如果不必担心,为什么要使用OpenCL,对吗?)。
我读到OpenCV在内部(UMat)使用OpenCL ,并且可以GPU通过访问来访问缓冲区UMat::handle。但是,到目前为止,我对此的尝试还没有成功。

目的是将UMat缓冲区重用作为OpenCL的输入kernels,并最终将结果作为图像返回给另一个图像UMat进行显示。

OpenCV框架仅旨在为程序生成输入,因此,我对使用OpenCV CL包装器(cv::ocl)不感兴趣,而对使用常规OpenCL(cl::...)感兴趣。这样可以避免在完整软件中包含/链接OpenCV框架。

问题:

如何通过OpenCL访问OpenCV UMat缓冲区?

  • 使用UMat缓冲区作为OpenCL缓冲区(第一个选项)
  • 将UMat缓冲区移至GPU内的OpenCL缓冲区。(第二个选项)

我已经取得的成就:

  • OpenCL完美独立运行
  • OpenCV完美独立运行
  • 将UMat :: handle转换为cl :: Buffer编译
  • 给定的缓冲区似乎无效。

免责声明:请好心,因为这只是这个问题的一个非常小的例子。

#include <iostream>
#include <vector>
#include <cassert>

#define __CL_ENABLE_EXCEPTIONS // enable exceptions instead of error-codes
#define CL_TARGET_OPENCL_VERSION 120
#include <CL/cl.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core/ocl.hpp>

using namespace cv;
using namespace std;

int main()
{
    // OPENCL STUFF
    // Very simplified/basic/stupid/naive …
Run Code Online (Sandbox Code Playgroud)

c++ opencv opencl

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

C++ 20 概念:需要运算符重载

我试图理解如何声明一个需要特定运算符重载的概念。假设我有以下函数,它采用任意类型的向量并将其打印到std::cout

template<typename printable>
void print_vector(const std::vector<printable>& vec) 
{
  std::cout << '{';
  for (const printable &item : vec) {
    std::cout << item << ',';
  }
  std::cout << '}';
}
Run Code Online (Sandbox Code Playgroud)

如果该类型printable具有重载<<运算符,则此代码将正常工作,但如果没有,则它会因非常无用的编译器错误而失败。我觉得我应该能够以某种方式声明一个需要<<定义了有效运算符的类型的概念,并在函数声明中使用该概念,以便我可以获得更有用的编译器错误,但我一直无法弄清楚如何去做。

c++ c++-concepts c++20

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