小编meo*_*lic的帖子

QML:等到动画结束

我试图按顺序制作可见的动画.我有一个javascript函数,它调用myModel.move()两次.我有一个GridView来显示myModel,我有"行为在x"动画,因此我可以看到动作.但是,两个运动动画师都是并列的(他们之间的小延迟并不明显).

我的想法是添加一个计数器,显示已启动的动画数量以及已完成的动画数量.像这样的东西;

Behavior on x {
    NumberAnimation {
        id: animationX;
        duration: 500;
        onRunningChanged: {
            if (animationX.running) {
                console.log("Animation start");
                myModel.busy = myModel.busy + 1
            } else {
                console.log("Animation stop");
                myModel.busy = myModel.busy - 1
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作.然后,我在我的javascript函数中添加一个循环,等待所有动画完成.

ListModel {
    id: myModel
    property int busy: 0
    function doSomething() {
        myModel.move(...)
        while (myModel.busy) {}
        myModel.move(...)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是问题所在.我可以看到,在第一次移动()后,所有必要的动画都开始了,但没有任何东西可以看到,也没有动画完成.我有某种僵局.怎么解决这个?

qt qml

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

QML:带可移动单元的GridView(拖放)

我遵循http://qt-project.org/wiki/Drag_and_Drop_within_a_GridView上给出的方法.

我有提出的计划.拖放工作正常,但在删除后,我的网格中出现空白空间.我怎样才能改善这个?

此外,我还注意到第46行中的函数indexAt()在拖动操作期间无法正常工作.因此我不得不添加gridArea.index的显式计算.

(编辑)在我看来,空的空间出现是因为在丢弃元素之后它返回到它的原始位置(它在可见元素下面).GridView未更新并以不规则状态完成.

import QtQuick 1.1

GridView {
    id: mainGrid
    cellWidth: 165; cellHeight: 95
    width: 5*cellWidth; height: 4*cellHeight
    model: myModel
    delegate: myButton

    ListModel {
        id: myModel
        function createModel() {
            for (var i=1; i<=20; i++) {
                myModel.append({"display": i, "uid": i})
            }
        }
        Component.onCompleted: {createModel()}
    }

    Component {
        id: myButton
        Rectangle {
            id: item
            width: mainGrid.cellWidth-5; height: mainGrid.cellHeight-5;
            border.width: 1
            property int uid: (index >= 0) ? myModel.get(index).uid : -1
            Text {
                anchors.centerIn: parent
                text: display
                font.pixelSize: 48
            } …
Run Code Online (Sandbox Code Playgroud)

gridview drag-and-drop qml

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

在TCL扩展TCL解释器

我已经为正式方法领域的特定工具实现了许多TCL扩展(扩展在C中实现,但我不希望解决方案依赖于这个事实).因此,我的工具的用户可以使用TCL进行原型设计算法.其中许多只是线性的命令列表(它们很强大),例如:

my_read_file f
my_do_something a b c
my_do_something_else a b c
Run Code Online (Sandbox Code Playgroud)

现在,我对时机感兴趣.可以更改脚本以获取:

puts [time [my_read_file f] 1] 
puts [time [my_do_something a b c] 1] 
puts [time [my_do_something_else a b c] 1] 
Run Code Online (Sandbox Code Playgroud)

而不是这个我想要定义执行TCL脚本和获取/写入所有命令的时间的过程xsource.某种形式的探查器.我写了一个天真的实现,其主要思想如下:

 set f [open [lindex $argv 0] r]
 set inputLine ""
 while {[gets $f line] >= 0} {
   set d [expr [string length $line] - 1]
   if { $d >= 0 } {
     if { [string index $line 0] != "#" } {
       if {[string index $line $d] == …
Run Code Online (Sandbox Code Playgroud)

tcl

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

TCL扩展相互依赖

我的问题有点类似于此,但它是关于TCL扩展.

我在Linux上使用C(gcc),我有一个包含三个模块A,B和C的包.模块A包含函数,还定义(不仅仅是声明)全局变量.我编译并将模块A链接到动态库(libA.so).

现在,我希望B和C是TCL扩展.两者都使用来自A的函数和全局变量,而C也使用来自B的函数.我已经制作了B和C共享库(B.so和C.so)但没有使用"-Wl -soname".我做B.so取决于A.so,而C.so没有用户依赖.虽然这很奇怪,但bot加载并正常工作.这是我所拥有的(A = libbiddy.so,B = bddscout.so,C = bddscoutIFIP.so):

meolic@meolic:/usr/lib/bddscout$ ldd *.so
bddscout.so:
    linux-gate.so.1 =>  (0x00177000)
    libbiddy.so.1 => /usr/lib/libbiddy.so.1 (0x00eca000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00342000)
    /lib/ld-linux.so.2 (0x0061f000)
bddscoutIFIP.so:
    linux-gate.so.1 =>  (0x00fc2000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00110000)
    /lib/ld-linux.so.2 (0x00c75000)

meolic@meolic:/usr/lib/bddscout$ wish
% puts $tcl_patchLevel
8.5.8
% load ./bddscout.so
% load ./bddscoutIFIP.so
% info loaded
{./bddscoutIFIP.so Bddscoutifip} {./bddscout.so Bddscout} {{} Tk}
Run Code Online (Sandbox Code Playgroud)

问题是,完全相同的包在任何地方都无法正常工作.在新的计算机扩展C.so不加载.

meolic@altair:/usr/lib/bddscout$ ldd *.so
bddscout.so:
    linux-gate.so.1 =>  (0xb76ef000)
    libbiddy.so.1 => /usr/lib/libbiddy.so.1 (0xb76c9000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb754d000)
    /lib/ld-linux.so.2 (0xb76f0000)
bddscoutIFIP.so:
    linux-gate.so.1 …
Run Code Online (Sandbox Code Playgroud)

c linux linker dependencies tcl

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

从QML访问QStandardItemModel的项目

(编辑)在原始问题中,我错误地认为GridView本身使用二维模型.实际上,它需要与其他QML视图类似的元素列表.为了使问题和答案更容易理解,我稍微改变了给定的代码.此外,我根据答案添加了工作解决方案.

在主程序中,我定义了一个QStandardItemModel的实例:

QScopedPointer<QApplication> app(createApplication(argc, argv));
QmlApplicationViewer viewer;

QStandardItemModel* cppmodel = new QStandardItemModel();
for (int i=0; i<100; i++) {
    QStandardItem* item = new QStandardItem(QString("%1").arg(i,2,10,QChar('0')));
    cppmodel->appendRow(item);
}
Run Code Online (Sandbox Code Playgroud)

然后,我将模型注册到QML:

viewer.rootContext()->setContextProperty("cppModel",cppmodel);
Run Code Online (Sandbox Code Playgroud)

QStandardItemModel是一个表,不是吗?然后,我如何编写委托以在简单的GridView中显示项目:

    GridView {
        model: cppModel
        delegate: Rectangle {
            Text { text: ??? } //WHAT MUST BE USED HERE ???
        }
    }
Run Code Online (Sandbox Code Playgroud)

我是否必须使用命名角色或者我可以使用正确创建的索引吗?

c++ qt qml

4
推荐指数
2
解决办法
3096
查看次数

为bundle exec指定环境变量

我见过两种不同的方法在执行时指定环境变量bundle exec。Linux 上哪一个是正确的?也许两者都有?我正在寻找一般答案,我知道在这种特殊情况下(更新Redmine)指定 RAILS_ENV 可能甚至是不必要的。

bundle exec rake db:migrate RAILS_ENV=production
Run Code Online (Sandbox Code Playgroud)
RAILS_ENV=production bundle exec rake db:migrate
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails redmine

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

haskell 中 2 个新类型的“或”模式匹配

我在 haskell 程序中使用决策图库。为此,我想声明 2 种不同的(新)类型来跟踪我正在处理的决策图。我使用的库是 cudd,决策图基类型有一个 DdNode,但我的问题仅与 Haskell 相关。

newtype Bdd = ToBdd Cudd.Cudd.DdNode
newtype Zdd = ToZdd Cudd.Cudd.DdNode
Run Code Online (Sandbox Code Playgroud)

通常我想在调用函数时区分它们,但现在我想使用一个不必区分这两种类型的函数。我主要尝试通过 3 种不同的方式来解决这个问题:

data Dd = ToBdd Bdd | ToZdd Zdd

printDdInfo :: Dd -> IO()
printDdInfo (ToZdd dd) = do
    putStrLn "Hello, zdd!"
    Cudd.Cudd.cuddPrintDdInfo manager dd
printDdInfo (ToBdd dd) = do
    putStrLn "Hello, bdd!"
    Cudd.Cudd.cuddPrintDdInfo manager dd

printDdInfo :: Either Bdd Zdd -> IO()
printDdInfo (ToZdd dd) = do
    putStrLn "Hello, zdd!"
    Cudd.Cudd.cuddPrintDdInfo manager dd
printDdInfo (ToBdd dd) = do …
Run Code Online (Sandbox Code Playgroud)

import haskell either binary-decision-diagram newtype

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