小编Tro*_*eph的帖子

寻找许可证密钥算法

有关Stack Overflow上提出的许可证密钥的许多问题.但是他们没有回答这个问题.

任何人都可以提供一个简单的许可证密钥算法,该算法是独立于技术的,并且不需要数学文凭来理解吗?

许可证密钥算法类似于公钥加密.我只需要一些简单的东西,可以在任何平台.NET/Java中实现,并使用像字符这样的简单数据.

写为伪代码的答案是完美的.

因此,如果一个人呈现一个字符串,则可以生成一个补充字符串,即授权代码.以下是它将用于的常见方案.

  1. 客户下载软件,该软件在初始启动/安装时生成唯一密钥.
  2. 软件在试用期间运行.
  3. 在试用期结束时,需要授权密钥.
  4. 付款后,客户进入指定的网站,输入他们的代码并获得授权代码以启用软件

不要害怕描述你的答案,好像你和一个5岁的老人说话,因为我不是数学家.

licensing authorization

33
推荐指数
4
解决办法
5万
查看次数

六角网格,你如何找到一个点的六边形?

我有一个由行和列六边形组成的地图

这不是我正在使用的十六进制映射的实际图像,但使用相同的大小和形状六边形

当用户点击时,我需要能够分辨出哪一个鼠标结束了

每个Hexagon都由一个"Tile"类的实例表示,但是它不包含任何位置特定的数据,甚至不包含多边形,所以基本上唯一的方法就是知道它在特定六边形的位置.二维数组.

之前我使用过方格,并且相对容易确定选择了哪个方格,因为像素也是方形的,

        // example where each square is 10 by 10 pixels:

private void getClickedSquare(MouseEvent me)
    {
        int mouseX = me.getX();// e.g. 25
        int mouseY = me.getY();// e.g. 70

        int squareX= (int) (mouseX / 10);// in this case 2
        int squareY= (int) (mouseY / 10);// in this case 7

//then to access the tile I would do

        map.squares[squareX][squareY].whatever();
    }
Run Code Online (Sandbox Code Playgroud)

但我甚至不确定从哪里开始使用Hexagons,有没有人有任何经验?

我不能使用多边形(Java),因为当我在屏幕上移动地图并增加它的大小时,我会遇到每帧更新大量多边形的问题.虽然我可以检查地图的任何一个平铺的多边形中是否包含一个点!

目前显示的六边形只是BufferedImages.

如果您想了解更多信息,请询问,谢谢您的时间:D

algorithm point hexagonal-tiles

32
推荐指数
3
解决办法
2万
查看次数

是否可以断开所有QObject的连接而不删除它

我有一个QObject A,它连接到另一个QObject B.现在我希望A连接到C,第三个QObject并完全断开与B.

十分简单!麻烦的是我有很多A都有自己的信号和插槽(B/C更通用).到目前为止,我已经为每个不同的类类型手动创建了connect和disconnect方法.该方法基本上交换彼此的副本connect进行disconnect通话,逆着不要重复自己).

所以我的问题是:以下功能是否可行?

void deleteAllConnections(QObject* someObject) {
    // TODO disconnect all connections owned by someObject
    // For bonus points: Is there a way of accessing the QMetaObject connected to?
}
Run Code Online (Sandbox Code Playgroud)

我在QMetaObject,QObject以及Signals and Slots文档中捅了一下没有运气(虽然这通常不是保证......).

c++ qt qobject qmetaobject

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

如何在JPopupMenu中选择第一项?

在过去,当一个人JPopupMenu看到它时,它的第一个项目将被默认选中:http://weblogs.java.net/blog/alexfromsun/archive/2008/02/jtrayicon_updat.html

现在,默认行为是弹出菜单而不选择任何项目.我想创建一个JPopupMenu单独的项目,将弹出选中并在鼠标指针下居中.我已设法让项目以鼠标为中心弹出,但我JMenuItem拒绝渲染,就像它被选中一样.如果我将鼠标移出项目并返回其中,则选择正确.

有任何想法吗?

这是我的测试用例:

import java.awt.Component;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;

public class Test extends JFrame
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        frame.setSize(800, 600);
        frame.getContentPane().addMouseListener(new MouseAdapter()
        {
            @Override
            public void mousePressed(MouseEvent e)
            {
                if (e.isPopupTrigger())
                    popupTriggered(e);
            }

            @Override
            public void mouseReleased(MouseEvent e)
            {
                if (e.isPopupTrigger())
                    popupTriggered(e);
            }

            private void popupTriggered(MouseEvent e)
            {
                JPopupMenu menu …
Run Code Online (Sandbox Code Playgroud)

java swing jmenupopup

6
推荐指数
2
解决办法
6400
查看次数

如何定义一个qreal文字

在Qt文档中,它说a qreal是a

除非使用-qreal float选项配置Qt,否则键入为double.

这基本上意味着几乎总是double,但float在ARM设备.

我想使用qreal文字,但我不知道如何编写它们.

qreal someValue = calcFunc();
qreal min = qMin(someValue, 0.0);
Run Code Online (Sandbox Code Playgroud)

哪里0.0double文字和0.0f将是一个float文字.在ARM上,这是一个编译错误,因为没有qMin(float, double)函数.

我可以写,static_cast<qreal>(0.0)但这似乎过于冗长.

那么我该如何定义qreal文字呢?

qt literals

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

Java:openGL:JOGL:当我调用display()方法时,幕后会发生什么?

我有这行代码:

renderableObject.renderObject(gl, glu);
Run Code Online (Sandbox Code Playgroud)

这会导致openGL呈现大量对象,但只有在使用时才能使用:

@Override
public void display(GLAutoDrawable drawable)
    {               
        renderableObject.renderObject(gl, glu);
    }
Run Code Online (Sandbox Code Playgroud)

如果我在重写的显示方法之外调用该行,我得到一个异常,说当前线程上没有glContext,实际上如果我在这个方法之外调用任何gl draw命令,我得到相同的异常

理想情况下,我想创建一个显示列表一次,然后使用奇数显示列表每帧渲染它们以定期重新创建.但是我必须通过这个单一的display()方法,这意味着如果显示列表已经创建,或者需要更改等,我必须测试每一帧...每秒60次!当我需要时可以单独处理它们时会浪费处理能力.

所以无论调用display()方法做什么,我都希望能够复制它,这样我就可以创建大量自己的自定义显示方法,而无需通过这一方法来实现一切!

那么我可以做一个简单的电话吗?

java opengl jogl

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

Scala为非常相似的表达式返回不同的类型

如果我在Scala REPL中评估以下表达式:

scala> "1" + 1
res0: java.lang.String = 11
Run Code Online (Sandbox Code Playgroud)

返回的类型是:java.lang.String.

如果我评估这个相似的表达式:

scala> 1 + "1"
res1: String = 11
Run Code Online (Sandbox Code Playgroud)

返回的类型是:String.

为什么不同?

java expression scala

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

如何使用绑定将成员函数作为函数指针传递?

我试图将成员函数作为函数指针传递,这样我就不必依赖单例或全局函数来处理Qt 5中的Qt消息。据我所知,std :: function是正确的类型,它具有正确的签名,并且bind应该允许我阻塞隐式this指针,本质上是将成员函数作为全局/非拥有函数传递出去。

void ProgramMessageHandler::setAsMessageHandlerForProgram() {
    std::function<void(QtMsgType, const QMessageLogContext &, const QString &)> funcPtr;

    funcPtr = std::bind(handleMessages, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);

    qInstallMessageHandler(funkPtr);
}
Run Code Online (Sandbox Code Playgroud)

这不会编译。我可以成功创建funcPtr变量,但是将其传递给qInstallMessageHandler函数会导致以下情况:

log\ProgramMessageManager.cpp:16: error: cannot convert 'std::function<void(QtMsgType, const QMessageLogContext&, const QString&)>' to 'QtMessageHandler {aka void (*)(QtMsgType, const QMessageLogContext&, const QString&)}' for argument '1' to 'void (* qInstallMessageHandler(QtMessageHandler))(QtMsgType, const QMessageLogContext&, const QString&)'
 oldHandler = qInstallMessageHandler(hackedPointerToHandleFunction);
                                                                  ^
Run Code Online (Sandbox Code Playgroud)

我读过了:

如何通过成员函数作为函数指针?

如何传递成员函数指针?

如何将成员函数作为参数传递给不期望它的函数?

使用std :: bind时从std :: function获取函数指针

但没有人帮助我。

编辑:

因此,有人说没有单例或全局功能是不可能的……但是为什么呢?具有相同签名的成员函数和全局函数之间的唯一区别是它们没有相同的签名,存在隐式this指针作为成员函数的第一个参数。 …

qt stdbind c++11

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

调用一个特别没有模板化的函数

我有一堆函数可以检查各种形状之间的碰撞。

bool Collides(Rect r, Circle c);
bool Collides(Rect r, Line l);
bool Collides(Line l, Circle c);
Run Code Online (Sandbox Code Playgroud)

我希望我可以实现一个单一的模板化函数,通过允许它交换输入参数来将我的实现计数减半。这样就不必还必须实施:

// The same as before but the input parameters swapped
bool Collides(Circle c, Rect r) { return Collides(r, c); }
bool Collides(Line l, Rect r) { return Collides(r, l); }
bool Collides(Circle c, Line l) { return Collides(l, c); }
Run Code Online (Sandbox Code Playgroud)

我可以改为写一次:

template <typename Shape1, typename Shape2>
bool Collides(Shape1 a, Shape2 b)
{
    return Collides(b, a);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当两者Collides(a, b)Collides(b, a)都没有实现它调用模板递归函数在运行时,这显然是无意识的行为。 …

c++ templates template-meta-programming

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

使用.clone()复制2D数组仍然引用原始数据

好的,我知道之前已经问过这个问题:上一个问题

我还研究了其他几个主题和网站,他们似乎都创造了更多问题而不是答案.

Josh Bloch on Design - 一篇文章讨论.clone();

但我仍然无法解决我的问题.

当我克隆我的2D数组时:

values = Map.mapValues.clone();
Run Code Online (Sandbox Code Playgroud)

我仍然无法安全地修改内容,values因为它仍然修改了内容Map.mapValues.

有没有办法复制一个比我更有效的数组,每次只是从头开始重新创建一个?

谢谢

java arrays clone copy

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

Eclipse CDT Build Console输出不显示整个编译器输出

在构建和调试大型C++程序时,控制台的输出非常大,以至于控制台会切断输出的开始.这特别令人讨厌,因为编译器输出的第一个错误通常对于调试来说是最重要的.


编辑:所以问题是:如何查看整个控制台输出?

c++ console eclipse-cdt

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

我该如何阻止TortoiseGit询问我登录的对象?

好的,首先我已经设置了SSH密钥,我没有被要求输入密码,这不是另一个身份验证问题!

但我仍然被问到这样的问题:每次我想拉或推我的代码时,在对话框中"登录为".我怎么能让它消失?

在此输入图像描述

tortoisegit

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

std::uniform_real_distribution 总是返回无穷大

当我运行此代码时:

double getRandomDouble() {
    static std::mt19937 entropy_ = std::mt19937();
    std::uniform_real_distribution<double> distribution;
    distribution.param(typename decltype(distribution)::param_type(std::numeric_limits<double>::lowest(),
                                                                   std::numeric_limits<double>::max()));
    return distribution(entropy_);
}
Run Code Online (Sandbox Code Playgroud)

它总是返回无穷大(至少在 GCC8.1 和 clang 11.0.1 中。在 MSVC 14.16.27023 中它断言)

这是 GodBolt 中的一个工作演示

我希望这个函数返回任何随机的双精度值,这里发生了什么?

c++ random numeric-limits

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