我有一个玩具QML应用程序(Qt 5.7),它由以下QML页面和一些C++代码组成,允许QML在音频设备上订阅某个状态并在QML GUI中反映该状态.玩具QML看起来像这样:
import QtQuick 2.6
import QtQuick.Controls 1.5
import QtQuick.Window 2.2
Item {
id: deviceState
property bool mute1: false
property bool mute2: false
property bool mute3: false
property bool mute4: false
Component.onCompleted: {
// Call out to C++ land, to tell the server what
// control points we are interested in tracking the state of
topLevelWindow.subscribeToControlPoints("Input 1-4 Mute", deviceState);
}
// Called by C++ land to tell us the current state of
// a control point we previously subscribed …Run Code Online (Sandbox Code Playgroud) 我有一个包含嵌入式Python 2.6解释器的程序.当我调用解释器时,我调用PySys_SetPath()来设置解释器的import-path到我的可执行文件旁边安装的子目录,这些子目录包含我的Python脚本文件......像这样:
PySys_SetPath("/path/to/my/program/scripts/type1:/path/to/my/program/scripts/type2");
Run Code Online (Sandbox Code Playgroud)
(除了根据程序可执行文件的当前位置动态生成路径字符串,而不是如上例所示的硬编码)
这工作正常......除非聪明的用户决定在我的名称中包含冒号的文件夹下安装我的程序.在这种情况下,我的PySys_SetPath()命令最终看起来像这样(注意存在名为"path:to"的文件夹):
PySys_SetPath("/path:to/my/program/scripts/type1:/path:to/my/program/scripts/type2");
Run Code Online (Sandbox Code Playgroud)
...这打破了我所有的Python脚本,因为现在Python在"/ path"和"to/my/program/scripts/type1"而不是"/ path:to/myprogram/scripts/type1"中查找脚本文件",所以没有任何导入语句有效.
我的问题是,除了告诉用户在文件夹名称中避免冒号之外,是否有任何解决此问题的方法?
我查看了Python/sysmodule.c中的makepathobject()函数,它似乎不支持任何类型的引用或转义来处理文字冒号....但也许我错过了一些细微差别.
今天,我了解了如何使用Perl在一个或多个文件中进行搜索和替换。例如,我可以这样做:
perl -i -p -e "s/Sydney/Moscow/g" cities.txt
Run Code Online (Sandbox Code Playgroud)
...,然后完成操作,city.txt将被就地修改,这样字符串“ Sydney”的所有实例都将被“ Moscow”替换。
很好,但是我想更多地控制:特别是,我希望搜索和替换操作仅在以字符串“ HomeCities:”开头的行上发生
例如,如果在运行命令之前,city.txt看起来像这样:
HomeCities: Dublin, Sydney, Los Angeles, Chicago
AwayCities: New York, Melbourne, Sydney, Oakland
Run Code Online (Sandbox Code Playgroud)
...然后在命令完成后,将如下所示:
HomeCities: Dublin, Moscow, Los Angeles, Chicago
AwayCities: New York, Melbourne, Sydney, Oakland
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以编写带有明确的每行for循环和每行逻辑的脚本或程序呢?
我今天的QML/QtQuick练习是制作一个小ToggleButton小部件,我可以实例化它来监视指定的布尔QML属性的状态,并且当我点击ToggleButton时也切换该属性的状态.
到目前为止,我有我的ToggleButton组件:
// Contents of ToggleButton.qml
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.4
Button {
property bool isActive: false
onClicked: {
isActive = !isActive;
}
style: ButtonStyle {
background: Rectangle {
border.width: control.activeFocus ? 2 : 1
border.color: "black"
radius: 4
color: isActive ? "red" : "gray";
}
}
}
Run Code Online (Sandbox Code Playgroud)
....这是我的小测试工具,用于查看它是否按照我想要的方式工作:
// Contents of main.qml
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
visible: true
width: 360
height: 360
Rectangle {
property bool lighten: false;
id:blueRect
x: 32; …Run Code Online (Sandbox Code Playgroud) 我从Python 2.6.1中遇到了一些我没想到的行为.以下是重现问题的一些简单代码:
---- ControlPointValue.py ------
class ControlPointValue:
def __init__(self):
pass
---- ControlPointValueSet.py ----
import ControlPointValue
---- main.py --------------------
from ControlPointValue import *
from ControlPointValueSet import *
val = ControlPointValue()
Run Code Online (Sandbox Code Playgroud)
....这是我运行main.py时遇到的错误(在OS/X Snow Leopard下,如果重要的话):
jeremy-friesners-mac-pro-3:~ jaf$ python main.py
Traceback (most recent call last):
File "main.py", line 4, in <module>
val = ControlPointValue()
TypeError: 'module' object is not callable
Run Code Online (Sandbox Code Playgroud)
有人能解释一下这里发生了什么吗?Python是否因为类名与文件名相同而感到困惑?如果是这样,解决问题的最佳方法是什么?(我更喜欢让我的python文件以它们中定义的类命名)
谢谢,杰里米
我正在尝试编写一个简单的模板化函数,它将数组的所有成员初始化为零(或者如果数组是一个对象数组,则将其初始化为默认构造状态).这是我写的:
template<typename T, int size> inline void ClearTheArray(T[size] theArray)
{
for (size_t i=0; i<size; i++) theArray[i] = T();
}
Run Code Online (Sandbox Code Playgroud)
...我的想法是,我可以将任何数组重置为其默认构造/全零状态,如下所示:
int myArray[6] = {1,2,3,4,5,6};
ClearTheArray(myArray);
// myArray now contains all zeroes
int * somePointer = myArray;
ClearTheArray(somePointer); // compile error: somePointer doesn't contain array length info
Run Code Online (Sandbox Code Playgroud)
但是,上面没有编译; 相反,我theArray在正式参数列表的第一个实例中得到语法错误("expected')'").我在这做错了什么?有没有办法做到这一点?
使用选择方法 nPk(即 nPk = n!/(nk)!*k!)计算 52 副牌中的扑克手总数(即每手五张牌),即 2,598,960 手可能。我想做的是生成所有可能的情况(即 2,598,960 手)。我想到的唯一方法是随机生成一个手并将其添加到一个向量中。每次添加手牌时,我都会检查它是否已经存在,如果存在,则继续生成随机手牌。这当然会奏效,但我正在为此寻找更快、更优雅的方法。一手牌的顺序并不重要。这是一个最小的工作示例,可以节省您的时间。
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
using namespace std;
const int SUIT_MAX(4);
const int RANK_MAX(13);
const int HAND_SZ(5);
const std::string SUIT[SUIT_MAX] = {"S", "H", "D", "C"};
const std::string RANK[RANK_MAX] = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
class Card
{
public:
Card(const string &suit, const string &rank) { m_card = rank + suit; }
std::string print() const { return m_card; }
private:
string m_card;
};
class Hand
{
public:
Hand(const vector<Card>& cards)
{ …Run Code Online (Sandbox Code Playgroud)