我正在尝试制作一个应用程序,您可以在其中用手指在画布上绘画。
为了实现这一点,我将QWidgetas子类化MFCanvas,在 QML 中使用 注册类
qmlRegisterType<>(),实现虚paintEvent();函数,并在函数内部
绘制它。
问题:
在构建时,抛出此警告:QPainterpaintEvent();
QPainter
QWidget::paintEngine: 不应再被调用
然后,抛出几个其他相关警告:
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
Run Code Online (Sandbox Code Playgroud)
难怪:QPainter什么都没画……
还有,我应该自己打电话paintEvent();吗?
还是应该每帧都调用它QWidget,而我却以某种方式把它搞砸了?
我在网上搜索,但我发现的所有帖子都没有答案,或者他们
使用的不是QWidget.
我的代码:
mfcanvas.cpp:
#include "mfcanvas.h"
#include <QDebug>
#include <QPainter>
#include <QVector2D>
#include <QList>
MFCanvas::MFCanvas(QWidget *parent) : QWidget(parent)
{
paths = new QList<QList<QVector2D>*>();
current = NULL;
QWidget::resize(100, 100);
}
MFCanvas::~MFCanvas()
{
delete paths;
} …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应该在
Windows,MacOSX,Android和iOS 上运行的应用程序.
我发现了如何在Windows和Mac上设置图标,但它如何在Android和iOS上运行?
谢谢阅读!
编辑:我不使用Nessecitas SDK.我的项目文件夹中没有AndroidManifest.xml.但是,我的项目文件夹中有一个名为"build-myProjectName-Android_f_r_armeabi_GCC_4_8_Qt_5_3_1-Release"的文件夹,其中包含一个文件夹"android-build",其中包含一个清单.
假设我们想制作一个你必须收集宝石的游戏.所以我们需要一个Gem类,一个GemSpawner类,当然还有MainActivity类.
public class MainActivity {
public static void main(String[] args) {
List<Gem> gems = new ArrayList<Gem>();
GemSpawner gs = new GemSpawner(gems);
//...
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们使用gems创建了一个List,并通过它的构造函数将其传递给GemSpawner,因此gs可以使用以下命令将gems添加到列表中:
gems.add(new Gem(10, 50, "red")); //should represent Xpos, Ypos, and color.
Run Code Online (Sandbox Code Playgroud)
但这不会更好:
public class MainActivity {
public static List<Gem> gems = new ArrayList<Gem>();
public static void main(String[] args) {
GemSpawner gs = new GemSpawner();
//...
}
}
Run Code Online (Sandbox Code Playgroud)
现在,GemSpawner(gs)可以使用以下命令添加宝石:
MainActivity.gems.add(new Gem(10, 50, "red"));
Run Code Online (Sandbox Code Playgroud)
朋友只向我展示并解释了上述方法,但下面的方法不是更有效吗?
在QML ListView中,我想在单击MouseArea时调用函数:
ListView{
anchors.fill: parent
orientation: ListView.Horizontal
model: myModel
delegate:
Rectangle {
anchors.fill: parent
Text {
anchors.centerin: parent
text: label
}
MouseArea {
width: 30
height: parent.height
onClicked: {
doSomething()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我应该是一个溢出菜单.在ListModel(myModel)中,我希望能够说出调用doSomething()时会发生什么.我怎么做?也许是这样的?
ListModel {
id: myModel
ListElement {
label: "New"
doSomething: {
canvas.clear()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道.我在网上搜索,但我找不到任何东西.
我正在使用ListView/Model,因为我想动态添加和删除菜单项.
感谢您的关注!=)
假设我有一个类列表:
List<Class<?>> classes;
Run Code Online (Sandbox Code Playgroud)
如果我现在采用其中一个类,让我们说...第二个,并且想知道它是否代表String类,我会做以下事情:
classes.get(1).equals(String.class)
Run Code Online (Sandbox Code Playgroud)
但我怎么知道它是否代表一种通用类型......说T?
class Foo<T> {
void someMethod(){
System.out.println(classes.get(1).equals(T)); //error: T cannot be resolved to a variable
}
}
Run Code Online (Sandbox Code Playgroud)
我试过了
T.class
(Class<T>)T
Run Code Online (Sandbox Code Playgroud)
但没有任何作用.我真的想知道这是否可能,如果可能的话,如何实现它.
感谢您的关注!=)
java ×2
qt ×2
android ×1
c++ ×1
constructor ×1
function ×1
generics ×1
icons ×1
ios ×1
listview ×1
parameters ×1
qml ×1
qpainter ×1
qt-creator ×1
static ×1