我尝试将其集成QtVirtualKeyboard到原型中,但我失败了.这是我第一次使用多个项目,或者我必须在QML/QMake-Project中包含非基本内容.
我从git-repository获得了代码并成功运行了这些示例.但现在我很困惑如何将它整合到我自己的项目中.
我的项目结构如下
Proto (dir)
+- Proto.pro
+- main.cpp
+- ...
+---QML (dir) <--- QML-Files
| +-main.qml
| +---CustomControls (dir)
| +---...
+---CPP (dir) <--- C++-Files and Headers
+---RES <--- Icons and stuff
Run Code Online (Sandbox Code Playgroud)
现在我想我可能只是将src-project从虚拟键盘添加到root-folder(Proto),并添加如下内容:
SUBDIR += src/src.pro
Run Code Online (Sandbox Code Playgroud)
to Proto.pro-file
=>是的,我可以这样做,但它没有任何优点.
那么我需要做什么才能真正使用呢?这一定非常简单,因为我无法在google,youtube或SO上找到任何关于它的问题.
编辑=>我仍然失败.这是我的故事:
我尝试了部署方法,按照这里的说明进行操作.
由于我更喜欢在应用程序中使用键盘,因此我执行了以下操作:
make install步骤qmake了另一个论点"CONFIG+=disable-desktop它似乎工作.在提到的目录中获得了新文件:
TL; DR
如何正确传递信息,QObject将QML 包装成可能以高频率发出的信号,减少开销,确保对象/引用至少超过连接插槽的执行?
我有一个C++ QObject注册为QML类型.这个对象有一些信号
void someSignal(InformationQObject* someInformation)
Run Code Online (Sandbox Code Playgroud)
其中我没有在单独的参数中传递所有信息但是在一个对象中 - 类似于在例如信号中找到MouseArea的信号
void clicked(QQuickMouseEvent *mouse)
Run Code Online (Sandbox Code Playgroud)
现在我想知道正确的终身管理someInformation.
到目前为止,在我的目标中,我有一个成员:
InformationQObject* m_lastInformation
Run Code Online (Sandbox Code Playgroud)
并发送我使用的信号:
void sendMySignal(/* possible params */)
{
delete m_lastInformation
m_lastInformation = new InformationQObject(/* right params here */)
emit someSignal(m_lastInformation)
}
Run Code Online (Sandbox Code Playgroud)
现在这似乎是错的.
理由:如果你看一下QQuickMouseArea它们的执行情况,就会采用不同的方式.看起来他们并没有为每个事件创建一个新对象,而是回收现有事件.我发现很难找到他们的所有来源,但我认为他们的一个文件中的这个评论给出了一个很好的理由:
QQuickPointerEvent用作长期存在的对象,用于在事件传递期间存储与指点设备(例如鼠标,触摸或平板电脑事件)中的事件相关的数据.它还提供了稍后可用于将事件暴露给QML的属性,与QQuickMouseEvent,QQuickTouchPoint,QQuickKeyEvent等相同.由于一次只能传递一个事件,因此该类实际上是单例.我们不担心QObject开销,因为实例是长期的:我们不会为每个事件动态创建和销毁此类型的对象.
但这是让我看到它变得复杂的地方,他们是如何做到的.这个评论是关于a QQuickPointerEvent.有一个QQuickPointerMouseEvent.在他们的信号中他们通过了QQuickMouseEvent*
后者是指向其中一个成员的指针QQuickMouseEvent quickMouseEvent.
在某些时候,不知何故,这个指针在QML中变得无效
MouseArea {
anchors.fill: parent
property var firstEvent
onClicked: {
if (firstEvent === undefined) firstEvent = mouse
console.log(mouse.x, mouse.y)
console.log(firstEvent.x, …Run Code Online (Sandbox Code Playgroud) 我有一个类(例如MyEnumClass,Q_GADGET),其中我限定enum,例如MyEnum.
我调用Q_ENUM(MyEnum)它将它注册到metaobject,并将整个类注册为QML的不可创建类型.
在我的第二个类(MyObject : QObject使用宏Q_OBJECT)中,我有一个使用MyEnumas参数的插槽.此对象作为常规类型注册到QML(可创建).
我想从QML调用带有值的插槽MyEnum- 这会失败,因为Type MyEnumClass::MyEnum似乎未知.
当使用插槽在类中定义枚举时,它可以正常工作.
MVCE
class MyEnumClass {
Q_GADGET
public:
enum MyEnum {
E1,
E2,
E3
};
Q_ENUM(MyEnum)
};
class MyObject : public QObject
{
Q_OBJECT
public:
MyObject(QObject* parent = nullptr) : QObject(parent) {}
enum TestEnum {
V1,
V2,
V3
};
Q_ENUM(TestEnum)
public slots:
void testFun1(MyEnumClass::MyEnum val) { qDebug() << val; }
void testFun2(TestEnum val) { …Run Code Online (Sandbox Code Playgroud) 我的问题几乎与此相似: 从矩阵平滑表面图
只是我的工具集是matplotlib和numpy(到目前为止).
我成功地生成了一个X,Y和Z网格来绘制
fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='summer', rstride=1, cstride=1, alpa=None)
Run Code Online (Sandbox Code Playgroud)
我想让事情变得平滑,至少使顶点连接起来,或者看起来像那样.
我的数据生成如下:我有一个功能
svOfMatrix(x, y)
Run Code Online (Sandbox Code Playgroud)
它产生一个依赖于x的矩阵,计算其y次幂,选择列和行的子集,并计算最大奇异值.所以,Z [x,y]是svOfMatrix(x,y)
由于这个计算非常昂贵,我不想让x的步骤太小,并且Y必然是整数.
此外,即使是非常小的步骤,也可能会有一些变化,我不想看到.所以我想以某种方式插入它.我找到了
http://docs.scipy.org/doc/scipy-0.14.0/reference/tutorial/interpolate.html,
但我没有让它发挥作用.
我正在尝试在此链接中实现本教程的第二部分:
http://code.tutsplus.com/tutorials/reading-qr-codes-using-the-mobile-vision-api--cms-24680
我收到错误:
BarcodeDetector has private access at..

知道为什么吗?
public class ScanActivity extends Activity {
SurfaceView cameraView;
TextView barCodeInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan);
cameraView = (SurfaceView) findViewById(R.id.camera_view);
barCodeInfo = (TextView) findViewById(R.id.code_info);
BarcodeDetector barcodeDetector = new BarcodeDetector().Builder(this).setBarcodeFormats(Barcode.QR_CODE)
.build();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在QML中创建一个新的javascript对象。
在javascript中,我将简单地:
var newObject = new Object();
Run Code Online (Sandbox Code Playgroud)
但这被QtCreator标记为错误
有人可以帮忙吗?
目前我有一个以下列方式打开的窗口:
property variant win
Button {
id: testButton
MouseArea {
onClicked: {
var component = Qt.createComponent("test.qml");
win = component.createObject(testButton);
win.show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建这样的窗口是否可以,或者有更好的方法来做到这一点(来自 QML,而不是来自 C++)?
当我关闭这个附加窗口时(只需单击“x”按钮),我想将它连接到另一个事件(例如,更改按钮的颜色)。怎么做?
谢谢。
我将练习这个例子,为此我在Windows 7 机器上使用 Qt Creator 4.3.0创建了一个名为Main2的Qt Quick Console 2 应用程序项目。
main.qml的代码如下所示:
我在应用程序输出窗口中收到以下错误:
程序意外结束。
C:\Users\Abbasi\Documents\QML\Main2\Main2\build-Main2-Desktop_Qt_5_9_0_MinGW_32bit-Debug\debug\Main2.exe 崩溃。
启动 C:\Users\Abbasi\Documents\QML\Main2\Main2\build-Main2-Desktop_Qt_5_9_0_MinGW_32bit-Debug\debug\Main2.exe ...
QML 调试已启用。仅在安全的环境中使用它。
请问路径有什么问题吗?
图像位于桌面上名为图像的文件夹中。如何将它们移动到项目下的文件夹中,请一步一步地说明?
我想在 Qml Quick Controls 2 中显示数字SpinBox而不使用数字格式:
SpinBox {
inputMethodHints: Qt.ImhDigitsOnly
from: 1000
to: 10000
}
Run Code Online (Sandbox Code Playgroud)
我尝试设置不同的区域设置,但每次数字都显示为“1.000”或“1,000”(正确的是“1000”)。有没有办法强制未格式化的输出?
我正在进行图像变换,我想从x原点和y原点同时缩放和旋转图像.我尝试使用单独的Scale,Rotate但它们同时工作一个.这是我的代码
function setRotation(rotation){
rt.origin.x=imagQuickitem.anchorPoint.x;
rt.origin.y=imagQuickitem.anchorPoint.y;
rt.angle=rotation
image.transform=rt;
image.transform=sc;
}
function setScale(scale){
sc.origin.x=imagQuickitem.anchorPoint.x;
sc.origin.y=imagQuickitem.anchorPoint.y;
sc.xScale=scale;
sc.yScale=scale;
image.transform=sc;
}
Scale { id:sc; }
Rotation { id:rt; }
Run Code Online (Sandbox Code Playgroud)
好吧,似乎解决方案是QMatrix4x4,我试图使用QMatrix4x4并发现这个链接 Qt变换矩阵, 但我不知道如何编写矩阵以适用于比例和旋转,我应该多个矩阵与旋转矩阵?
对于多态反序列化,Jackson 的 ObjectMapper 想要知道:
有一些标准方法,使用完全限定的类名和某些保留的 JSON 属性,因此 Jackson 可以推断这些内容而无需进一步配置。
另一种常见的方法是,通过添加注释@JsonTypeInfo和@JsonSubtypes到基本类型来为 Jackson 提供必要的信息。然而,这意味着,当添加新的子类型时,必须修改声明基类的文件。
还可以在运行时通过 .NET 以编程方式将子类型注册到 ObjectMapper objectMapper.registerSubtypes(...)。
现在,我正在寻找一种在运行时以编程方式提供来自 @JsonTypeInfo 的信息而不使用该注释的方法。
这样objectMapper.addTypeInfo(new TypeInfo(BaseType.class, PROPERTY, "myPropertyName", NAME);我就可以对另一个项目中声明的类型使用多态反序列化,而该项目对 Jackson 或其任何注释一无所知。