我试图按顺序制作可见的动画.我有一个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)
这是问题所在.我可以看到,在第一次移动()后,所有必要的动画都开始了,但没有任何东西可以看到,也没有动画完成.我有某种僵局.怎么解决这个?
我遵循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) 我已经为正式方法领域的特定工具实现了许多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扩展.
我在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) (编辑)在原始问题中,我错误地认为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)
我是否必须使用命名角色或者我可以使用正确创建的索引吗?
我见过两种不同的方法在执行时指定环境变量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) 我在 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)