对于多项式方程求解器,将其模板化以使任何类型可用是很好的:
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 的等价物?
对于自定义小部件,类似于菜单,当空间不足时,我在“下拉”框架内放置一些内容:
对于此下拉功能,我将这些按钮的框架设置为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) 基于我的Google和stackoverflow搜索,我猜测没有用于此目的的库.
目标是:在我的服务器上存储一些空白表单.然后将这些呈现给用户,用户使用Javascript在浏览器中编辑表单并将表单提交回服务器.
客户希望重用旧系统的部分(表单),用户可以在其中下载可编辑的PDF,编辑它,然后通过电子邮件将其发送给秘书.我们的用户不是非常精通计算机,很多人都没有意识到他们需要通过电子邮件发回表单,假设表单在保存本地更改(或其他内容)时以某种方式提交.
我还没有看过表格,所以我无法评估替代品的可行性.
我有一些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独立,所以我可以复制/通过类文件夹到一个新项目,它仍然有效,或者我可以单独执行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) 该软件显示 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) 一个QWidget作为一个paintEvent函数,它是负责他的绘画.要正确实现此功能,QStyle对象用于表示每个组件,QStyleOption对象用于保存控件的状态.
例如:一个自定义ScrollBar工具paintEvent,drawComplexControl用" CC_ScrollBar" 选项调用.然后,QProxyStyle可以扩展以更改滚动条的外观.
当用户悬停滑块时,paintEvent调用它会应用新的"悬停"外观,该状态保存在QStyleOption::state.但是对于现在的一天小部件,这个状态不应该立即更新,而是在大约100-500毫秒的平滑过渡(动画).为了使用此转换为窗口小部件设置动画,需要一些值,例如滚动的每个部分的动画的当前状态(a qreal/ QColor?):顶部箭头,底部箭头或滑块.
在这个"漫长"的介绍之后,我的问题来了:
是否有某个变量来设置此动画的状态?我可以QStyleOption使用这个新值进行扩展,但是当前的实现似乎已经包含了动画,我无法找到保存此转换状态的位置.
我正在寻找一个规范的答案.
注意:为了避免"可能重复...",即使稍微相关,这也不是关于如何使用QAnimation或创建自定义小部件的问题.
通常,右键单击窗口的标题栏会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 菜单相同的内容。这适用于任何平台,但内容可能与预期不同。
编写一些代码从 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添加这个?以及如何解决呢?
介绍:
目的是使用OpenCV捕获视频,并将其用作OpenCL程序的输入。两者的传输都必须尽可能高效(如果不必担心,为什么要使用OpenCL,对吗?)。
我读到OpenCV在内部(UMat)使用OpenCL ,并且可以GPU通过访问来访问缓冲区UMat::handle。但是,到目前为止,我对此的尝试还没有成功。
目的是将UMat缓冲区重用作为OpenCL的输入kernels,并最终将结果作为图像返回给另一个图像UMat进行显示。
OpenCV框架仅旨在为程序生成输入,因此,我对使用OpenCV CL包装器(cv::ocl)不感兴趣,而对使用常规OpenCL(cl::...)感兴趣。这样可以避免在完整软件中包含/链接OpenCV框架。
问题:
如何通过OpenCL访问OpenCV UMat缓冲区?
免责声明:请好心,因为这只是这个问题的一个非常小的例子。
#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) 我试图理解如何声明一个需要特定运算符重载的概念。假设我有以下函数,它采用任意类型的向量并将其打印到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具有重载<<运算符,则此代码将正常工作,但如果没有,则它会因非常无用的编译器错误而失败。我觉得我应该能够以某种方式声明一个需要<<定义了有效运算符的类型的概念,并在函数声明中使用该概念,以便我可以获得更有用的编译器错误,但我一直无法弄清楚如何去做。