小编dde*_*mez的帖子

如果不应该,Choco会将变量强制为true

我对Choco和CP完全不熟悉,但是我正在制作一个小模型来解决Steiner树问题,而Choco一直强迫第一个节点无论图形是什么(并且它不正确,我检查过).

我有一个esIntVar 数组,如果边缘在解决方案中== 1,否则== 0.对于vs设置顶点的数组也是如此.我使用数组activeEdgeW能够有一个标量约束,其中coeffs是可变的.然后我只有通道约束,树约束和sum == w约束.并尽量减少w.相当简单,但由于某种原因vs[0] == true总是,任何图形.

我的模型老实说非常简单,我真的不知道它来自哪里:

    s = new Solver("Solver");
    vs = VF.boolArray("vs", nbV, s);
    es = VF.boolArray("es", nbE, s);
    w = VF.integer("w", 0, maxW, s);

    IntVar[] activeEdgeW = new IntVar[nbE];
    for(int i = 0; i < nbE; i++) { 
        activeEdgeW[i] = VF.enumerated("activeEdgeW["+i+"]", new int[]{0,ws[i]}, s); //Weight is either 0 or ws[i]
        ICF.arithm(activeEdgeW[i], "=", ws[i]).reifyWith(es[i]); //weight of edge is ws[i] if edge is in, 0 otherwise
    }


    UndirectedGraph …
Run Code Online (Sandbox Code Playgroud)

java constraint-programming choco

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

QML:按下鼠标区域并悬停

对于我正在开发的应用程序,我绝对需要一件小事:我必须能够将一个对象拖到另一个对象上,并且至少其中一个应该注意到它们相交。所以,我的事情是,其中一个项目必须接受 onEntered 信号,即使鼠标在外面按下。

例如:

import QtQuick 1.0

Rectangle{
    id: base
    width: 500
    height: 500
    MouseArea{ //Even without this mousearea I don't get what i want.
        anchors.fill: parent
        //onPressed:{console.log("big")}
    }

    Rectangle{
       id: t
       width: 100
       height: 100
       color: "red"
       MouseArea{
          anchors.fill: parent
          hoverEnabled: true
          onPressed:{console.log("little-press")}
          onEntered:{console.log("little-enter")}
          drag.target: t
       }
     }
}
Run Code Online (Sandbox Code Playgroud)

我想要的是按下红色方块外的鼠标按钮,并在不释放按钮的情况下移动它。当鼠标经过红色矩形时,我希望发出 onEntered 信号。我不明白为什么不发出它,因为 onEntered 应该只关心 mouseArea 内的鼠标,而不是按钮。

知道怎么做吗?

非常感谢。

qml

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

C++无效转换为'const type*const'到'type*'

我有一个非常愚蠢的问题(我认为).很长一段时间不用C++编写代码,但我无法弄清楚这个问题.我有这门课:

#include <QList>
class Node {
private:
    QList<Node*> _adjacent;
public:
    Node();
    bool isConnectedTo(Node* n) const;
};
Run Code Online (Sandbox Code Playgroud)

这个实现isConnectedTo():

bool Node::isConnectedTo(Node* n) const{
    return _adjacent.contains(n) && n->_adjacent.contains(this);
}
Run Code Online (Sandbox Code Playgroud)

return在行中收到以下错误:

Node.cpp: In member function ‘const bool Node::isConnectedTo(Node*) const’:
Node.cpp:25:60: error: invalid conversion from ‘const Node* const’ to ‘Node*’ [-fpermissive]
In file included from /usr/include/qt5/QtCore/QList:1:0,
                 from Node.hpp:5,
                 from Node.cpp:1:
/usr/include/qt5/QtCore/qlist.h:913:27: error:   initializing argument 1 of ‘bool QList<T>::contains(const T&) const [with T = Node*]’ [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我认为,既然这个方法是常数,那么this就是const Node* const …

c++ qt

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

Qt/QML - 在 C++ 中注册 QML 类型会使 QML 代码无法工作

我正在开发一个名为“FloatingMenu”的类(应该用 C++ 管理菜单),并且在文件 FloatingMenu.qml 中为 GUI 提供了 QML 版本。我有一个文件 main.qml,其中有几个矩形和一个 FloatingMenu,它按预期显示。现在,如果我执行 qmlRegisterType("EasyGraph", 1,0, "FloatingMenu"); 在我的 main.cpp 中,FloatingMenu 的图形部分消失了。

这是我的代码:

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

 QGuiApplication app(argc, argv);

 //Register all the needed types in QML.
 qmlRegisterType<FloatingMenu>("EasyGraph", 1,0, "FloatingMenu");


 //The only window known as QDeCView in QML.
 QQuickView* view = new QQuickView();
 view->setMinimumHeight(100);
 view->setMinimumWidth(100);
 view->setResizeMode(QQuickView::SizeRootObjectToView);

 //Context, to set properties from c++ to QML
 //QQmlContext* cxt =  view->rootContext();

 //Load the base.
 view->setSource(QUrl::fromLocalFile("../qml/MainWindow.qml"&#41;&#41;;
 view->show();

 //FloatingMenu* menu = view->rootObject()->findChild<FloatingMenu*>("mainMenu"); //When registered, this works

 return app.exec(); …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qtquick2

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

TypeScript-使用&lt;reference path =“ .....”&gt;标记

我试图将插件添加到TypeScript编译器,所以我添加了代码并编译了tsc.ts。它可以正确编译,但是当我运行时,它缺少了io.ts中声明的一些变量。我删除了更改,但仍然无法使用。所以我尝试了这个:

文件:a.ts

var a : number = 5;
Run Code Online (Sandbox Code Playgroud)

文件:b.ts

///<reference path='a.ts' />
console.log(a);
Run Code Online (Sandbox Code Playgroud)

然后编译:tsc b.ts这给了我a.js和b.js。当我尝试运行b.js时node b.js,该变量a未定义。这是以下内容b.js

///<reference path='a.ts' />
console.log(a);
Run Code Online (Sandbox Code Playgroud)

因此a未定义是有道理的,因为a该文件中没有该位置,所以也没有a.ts

我编译错误还是执行错误..还是什么?

node.js typescript tsc

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

OpenSceneGraph将相机设置在初始位置

我是第一次使用OpenSceneGraph而且我有点迷失因为文档真的不那么清楚......

所以,我有这个代码加载带有房子的obj文件,我已经淹没了一个小盒子,我想要"人".所以现在,我不想在那里放置那个盒子,我想把相机放在那里,看着前面,后来我会去固定相机周围移动地形,这样看起来就像相机在移动但是地形在移动.

所以,这是我的代码:

int main()
{
    osgViewer::Viewer viewer;

    viewer.setUpViewInWindow(0,0,800,800);

    osg::ref_ptr<osg::Group> root (new osg::Group);

    osg::Node* terrain = osgDB::readNodeFile(".terrain.obj");
    if(terrain == NULL) {
        return -1;
    }

    Geode* gbox = new Geode();
    gbox->addDrawable(new ShapeDrawable(new Box()));

    PositionAttitudeTransform* terrainT = new PositionAttitudeTransform();

    PositionAttitudeTransform* boxT = new PositionAttitudeTransform();
    boxT->setScale(Vec3d(50,50,50));
    boxT->setPosition(Vec3d(1000,1000,0)); 

    root->addChild(terrainT);
    root->addChild(boxT);
    terrainT->addChild(terrain);
    boxT->addChild(gbox);

    viewer.setSceneData( root.get() ); 
    viewer.addEventHandler(new osgViewer::WindowSizeHandler);
    viewer.setCameraManipulator(new osgGA::TrackballManipulator());

    viewer.realize();
    while(!viewer.done()) {
        viewer.frame(); 
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以这段代码工作正常,它正确地加载了fiel,把盒子放在我想要的地方,我可以用鼠标导航.

现在,我真的找不到任何东西将相机放在盒子里.我不能.

任何人都可以给我一些如何做的提示吗?它应该不是很难,但我找不到任何好的教程和文档Viewer和Camera类真的不是很有帮助.

c++ opengl camera openscenegraph

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

线性规划:非重叠约束?

我想在线性程序(或必要时使用 MIP)中编写一个非重叠约束(即 2 个矩形不重叠)。我知道如何在约束编程中做到这一点:

对于对象 i 和 j:

x[i]+dx[i]<=x[j] 或 y[i]+dy[i]<=y[j] 或 x[j]+dx[j]<=x[i] 或 y[ j]+dy[j]<=y[i] 其中 x 和 y 是包含对象坐标的数组,dx 和 dy 是对象的维度。

知道在 LP/MIP 中执行此操作的最佳方法吗?谢谢!

linear-programming mixed-integer-programming

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

C++中的模板:(F-)有界多态

我已经检查了一段时间的内联网,并找到了我的问题的任何答案.我想知道C++是否支持有界多态性和/或F-有界多态性.

例如,在Java程序员中可以做到这一点(boundedn polymorphism):

<T extends Car> void startEngine(T c) {/*body method*/}
Run Code Online (Sandbox Code Playgroud)

这个(F-有界多态性):

<T extends Comparable<T>> void compareWith(T c) {/*body method*/}
Run Code Online (Sandbox Code Playgroud)

在C++中有什么相同的东西吗?

谢谢!

c++ polymorphism

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

c ++带模板的析构函数:T可以是指针还是不指针

在编写模板类win C++时,我遇到了一个小问题.问题很简单:我不知道是否要delete在paremetrized类型上做一个,因为它可能,或者它不能成为一个指针.

我已经看到了这样:模板类c中的析构函数:如何删除可能是指针或非指针的字段?

我已经实现了第一个解决方案,但这需要我专门化整个类,所以这意味着我必须有两个类:

template<class T>
class Node {
private:
    T _content;
public:
    Node(const T c); 
    ~Node();
};
Run Code Online (Sandbox Code Playgroud)

template<class T>
class Node<T*> {
private:
    T _content;
public:
    Node(const T c); 
    ~Node();
};
Run Code Online (Sandbox Code Playgroud)

我想只有第二个版本,并且对析构函数进行如下操作:

template<class T>
class Node<T*> {
private:
    T _content;
public:
    Node(const T c); 
    ~Node();
};
template <class T>
Node<T>::~Node() {
    while(!_adjacent.isEmpty()) {
        disconnectFrom(_adjacent.first());
    }
}
template <class T>
Node<T*>::~Node() {
    while(!_adjacent.isEmpty()) {
        disconnectFrom(_adjacent.first());
    }
    delete _content;
}
Run Code Online (Sandbox Code Playgroud)

但后来我收到以下错误:

Node.hpp:43:17: error: invalid use …
Run Code Online (Sandbox Code Playgroud)

c++ templates pointers

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