Q1:我对qml,quick1.0和quick2.0感到困惑.它们之间有什么区别.
我使用基于qt 5.1.1的qt creator 2.8.1.我想开发一个桌面程序,我应该使用哪种技术?
Q2:如何将数据导出到快速程序?我只找到关于qml的文档v 4.7.
我想从C++向我的QML文件中的Slot发送一个Signal.我已经让它没有和原始类型参数工作,但如果我想发送QString
到我的QML插槽我连接时出错.
我在main.cpp中连接
QObject *contentView = rootObject->findChild<QObject*>(QString("contentView"));
QObject::connect(&myObj, SIGNAL(finishedGatheringDataForItem(QString)),
contentView, SLOT(updateViewWithItem(QString)));
Run Code Online (Sandbox Code Playgroud)
我的qml文件的相关部分
Rectangle {
objectName: "contentView"
function updateViewWithItem(string) { console.log('got some Items'); } // slot
}
Run Code Online (Sandbox Code Playgroud)
错误:
Object::connect: No such slot QDeclarativeRectangle_QML_2::updateViewWithItem(QString)
Run Code Online (Sandbox Code Playgroud) 我知道在QT中使用QML是一个很新的东西,我想知道是否应该使用QTDesigner或QML设计我的应用程序.我将使用MVC模式和我主要担心的是,如果我在GUI中使用QML,那么在我的C++应用程序的reste中集成它可能并不容易.
请随意提出您的个人建议,我将不胜感激.谢谢!
我见过引用所有三个在Qt的网站的各个部分,这些应用程序的,但我在它们之间,以及他们是否实际上是不同的东西或者只是叫法不同同样的事情,或者名称随时间变化的具体差异完全不明?或者是不再支持?与这些有什么关系?
我在Qt中有一个基于QML的应用程序,它在运行时生成一些警告:
QDeclarativeExpression:表达式"(function $ text(){return pinyin})"取决于非NOTIFYable属性:hanzi :: DictionaryEntry :: pinyin
我相信它指的是这个类有一些没有通知符的属性(因为不需要):
#ifndef DICTIONARYENTRY_H
#define DICTIONARYENTRY_H
namespace hanzi {
class DictionaryEntry : public QObject {
Q_OBJECT
Q_PROPERTY(QString simplified READ simplified)
Q_PROPERTY(QString traditional READ traditional)
Q_PROPERTY(QString pinyin READ pinyin)
Q_PROPERTY(QString definition READ definition)
public:
explicit DictionaryEntry(QObject* parent = 0);
const QString& simplified() const;
const QString& traditional() const;
const QString& pinyin() const;
const QString& rawDefinition() const;
const QStringList& definitions() const;
const QString& definition() const;
void setSimplified(const QString& v);
void setTraditional(const QString& v);
void setPinyin(const …
Run Code Online (Sandbox Code Playgroud) 我一直在努力学习QtQuick用于GUI创建,但我一直很难理解如何从我的测试程序的C++部分与QML对象进行交互.
这是我简单的QML文件:
import QtQuick 2.2
import QtQuick.Window 2.1
Window {
id: mainWindow
visible: true
width: 800
height: 800
color: "#FFFF0000"
MouseArea {
anchors.fill: parent
onClicked: Qt.quit()
}
Rectangle {
id: testRect
width: 100
height: 100
anchors.centerIn: parent
color: "#FF0000FF"
}
}
Run Code Online (Sandbox Code Playgroud)
这是随附的基本C++文件(由QtCreator自动生成):
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道如何访问我的'Window'QML对象,因此,我无法改变它的任何属性或其子项的属性!QtQuick文档的这一部分显示了从C++代码中访问QML对象的两种方法,但它们似乎都不适用于这个'QQmlApplicationEngine'加载方案.我也看到人们使用'QApplicationViewer'和'QDeclaritiveView'之类的东西,但我似乎无法在官方文档中找到那些..
我对QtQuick感到非常沮丧; QML的"简单性"似乎在大量冲突的文档和C++与QML之间错综复杂的界面中丢失.无论如何我在使用QQmlApplicationEngine方法时访问我的QML对象?我尝试过使用'QuickView',但它似乎不适用于Window QML对象..?QQmlApplicationEngine仅对单个文件中的QML应用程序有用吗?到目前为止,我读过的每一篇文档和教程都显示了不同的东西......
任何帮助或澄清将不胜感激.理想情况下,我想知道如何通过我的C++代码访问和修改QML对象(如'mainWindow','testRect'和其他文件中的其他对象).
class StyleClass : public QObject {
public:
typedef enum
{
STYLE_RADIAL,
STYLE_ENVELOPE,
STYLE_FILLED
} Style;
Style m_style;
//...
};
Run Code Online (Sandbox Code Playgroud)
.h文件包含上面的代码.如何通过QML访问上面的枚举?
令我惊讶的是,该Image
组件没有radius
属性.我尝试通过将图像放在圆形中来模拟圆角Rectangle
,但它不会剪切角落.
Rectangle {
anchors.right: rectContentBg.left
anchors.top: rectContentBg.top
anchors.margins: 8
radius: 8
width: 64
height: 64
Image {
id: imgAuthor
opacity: 1
smooth: false
anchors.fill: parent
source: "qrc:/res/sample_avatar.jpg"
}
}
Run Code Online (Sandbox Code Playgroud)
如何正确创建圆角图像?
width/height
和implicitWidth/Height
QML有什么区别?应该何时设置隐式维度而不是常规维度?何时应该从组件/项目中询问隐式维度而不是常规维度?
我正在使用Qt5 beta并尝试将基于QWidget的对象嵌入到QML中.目标是尽可能多地使用QML,并且只使用QML不能满足我需要的QWidget对象.我找到了一个解释如何为Qt4.7执行此操作的链接,但我没有找到任何解释如何在Qt5中执行此操作的信息.
http://doc.qt.digia.com/4.7/declarative-cppextensions-qwidgets.html
Qt5示例文件夹中的相同示例也可用于:
实例\ qtquick1 \声明\ cppextensions\qwidgets
不幸的是,这个例子使用QtQuick 1而不是QtQuick 2,我想使用Qt5的新功能.我实际上想嵌入一个qwt小部件,但作为第一步,我很乐意嵌入任何简单的基于QWidget的对象.
任何人都可以帮助我在Qt5/QtQuick 2下工作吗?
qml ×10
qt ×8
c++ ×4
qtquick2 ×4
qt-quick ×2
qt5 ×2
qt-creator ×1
qt-designer ×1
qwidget ×1
warnings ×1