我正在写一个QML + Qt应用程序.我定义了一个这样的类:
class MainClass : public QObject
{
Q_OBJECT
public:
rosterItemModel m_rosterItemModel;
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
rosterItemModel模型是从QAbstractListModel派生的类.我使用这个函数将MainClass暴露给qml部分:
qmlRegisterType<MainClass>("CPPIntegrate", 1, 0, "MainClass");
Run Code Online (Sandbox Code Playgroud)
现在我想将这个模型(m_rosterItemModel)从MainClass分配给QML中的ListView的模型属性.我尝试了以下方法,但没有一个是有用的:(
有人能帮助我吗?
我正在尝试将QListQML中的整数传递给C++代码,但不知怎的,我的方法无效.使用以下方法我得到以下错误:
left of '->setParentItem' must point to class/struct/union/generic type
type is 'int *'
Run Code Online (Sandbox Code Playgroud)
任何麻烦拍摄问题的输入都非常感谢
以下是我的代码段
头文件
Q_PROPERTY(QDeclarativeListProperty<int> enableKey READ enableKey)
QDeclarativeListProperty<int> enableKey(); //function declaration
QList<int> m_enableKeys;
Run Code Online (Sandbox Code Playgroud)
cpp文件
QDeclarativeListProperty<int> KeyboardContainer::enableKey()
{
return QDeclarativeListProperty<int>(this, 0, &KeyboardContainer::append_list);
}
void KeyboardContainer::append_list(QDeclarativeListProperty<int> *list, int *key)
{
int *ptrKey = qobject_cast<int *>(list->object);
if (ptrKey) {
key->setParentItem(ptrKey);
ptrKey->m_enableKeys.append(key);
}
}
Run Code Online (Sandbox Code Playgroud) 
我正在尝试使用带有QtGraphicalEffects的QtQuick 2为我的项目添加效果,但我不太明白如何调整真正模糊的效果来看起来正确.
在这种情况下,投影的尺寸很小,并且在完全消失之前会在边缘处被剪裁.我怎样才能让它很好地融入而不会被切断?
这是窗口的代码:
import QtQuick 2.0
import QtGraphicalEffects 1.0
Item {
width: 250
height: 75
Text {
id: textItem
x: 10; y: 10
text: "how can I fix my shadow?"
}
DropShadow {
id: shadowEffect
anchors.fill: textItem
source: textItem
radius: 8
samples: 16
horizontalOffset: 20
verticalOffset: 20
}
}
Run Code Online (Sandbox Code Playgroud) 我想要做的是在qtcreator中测试QML.我有基于Qt 5.1.1的最新版Qt Creator 2.8.1.
我想将qml添加到我的c ++应用程序中.我尝试了很多方法.使用QDeclarativeView最合理的外观,但我不能包含它.
在专业文件中我添加QT + =核心gui声明我尝试添加快速,qml以及然后我仍然没有看到qtquick或声明性库.
我可以通过go工具 - > external-> qtquick-> qmlviewer在qmlViewer中看到"Qt Quick 2 UI"项目当我尝试构建Qt Quick 2应用程序(内置类型)时,我得到3x"无法打开包含文件"QtQuick/QQuickView"没有这样的文件或目录.
我想用qml做简单的c ++应用程序,谢谢你的帮助.我阅读了很多教程,但大多数都是在构建之后开始的.我有运行应用程序没有qml代码的问题.
我想在右键单击TableView行时显示上下文菜单.我试过这段代码:
import QtQuick 2.0
import QtQuick.Controls 1.0
TableView { id: tableView
width: 300
height: 200
TableViewColumn { role: 'a'; title: 'a'; width: 50 }
TableViewColumn { role: 'b'; title: 'b'; width: 50 }
model: ListModel {
ListElement { a: 1; b: 2 }
ListElement { a: 3; b: 4 }
ListElement { a: 5; b: 6 }
ListElement { a: 7; b: 8 }
ListElement { a: 9; b: 10 }
ListElement { a: 11; b: 12 }
}
Menu …Run Code Online (Sandbox Code Playgroud) 在编写不使用QML并且不依赖于新的Qt 5功能的Qt应用程序时,我们可以使用Qt 4和Qt 5编译它(除了少数源不兼容性).
当我们想要使用Qt 5功能但希望回归到同等但效率较低的Qt 4解决方案时,我们可以简单地使用an #if来检查Qt版本,例如使用新的QStringLiteral但是QString::fromUtf8在使用Qt 4编译时回落.
我们怎么能用QtQuick做同样的事情?请注意,有可能使用QDeclarativeView与QtQuick 1.xQt中5,但不会使用Qt的从5新场景图仅1.x被支持QDeclarativeView,只2.x支持在QQuickView,即使我不使用快速2.0中引入的功能.
我想要的是:
QDeclarativeView和朋友一起使用; 在QML中:import QtQuick 1.xQQuickView朋友; 在QML中:import QtQuick 2.xQtQuick 1.x和另一个用于QtQuick 2.x关于C++部分,这似乎很容易.在Qt 4中,我们可以简单地添加:
#include <QApplication>
#include <QDeclarativeView>
#include <QDeclarativeEngine>
typedef QApplication QGuiApplication;
typedef QDeclarativeView QQuickView;
Run Code Online (Sandbox Code Playgroud)
然后在Qt 4和Qt 5中使用QGuiApplication,QQuickView等等.但是当QML文件包含导入声明时QtQuick,我无法添加一个#if来决定1.x和2.x. 是否有正式的方法,比方说,添加一个别名 …
我一直试图想出一个解决方案,将QtQuick 2.0场景与Direct3D场景一起使用很长一段时间,但不是很成功.我的目标是让Direct3D引擎以合理的速度(60 FPS?)与QML UI一起运行.这两件事都可以自己运行150-200 FPS.但是当被迫在一个窗口内合作时,一切都只是香蕉.我调查了几种方法,但似乎没有一种方法足够:
解决方案A:将Direct3D场景渲染到纹理中,使用QImage和QQuickPaintedItem进行可视化
解决方案B:将QtQuick场景渲染到FBO中,然后使用Direct3D纹理
解决方案C:在具有Direct3D场景的QWidget顶部启用透明度的QQuickView
解决方案X:修改ANGLE库并尝试使用Direct3D渲染器提取和共享D3D设备上下文
我这里显而易见的问题是:我做错了吗?什么是首选解决方案?A,B,C,X或者可能是完全不同的东西?有人能指出我正确的方向吗?
TL; DR: 在Direct3D场景之上渲染QML场景的最快方法是什么?
我想用Qt Quick创建下面的光泽按钮(最好是纯QML,没有C++):

它需要是可扩展的,所以我不能使用PNG等.
我的代码到目前为止:
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
ApplicationWindow {
id: window
color: "#cccccc"
width: 200
height: 200
Button {
id: button
width: Math.min(window.width, window.height) - 20
height: width * 0.3
anchors.centerIn: parent
text: "Button"
style: ButtonStyle {
background: Rectangle {
gradient: Gradient {
GradientStop {
position: 0
color: "#bbffffff"
}
GradientStop {
position: 0.6
color: "#00c0f5"
}
}
border.color: "grey"
border.width: height * 0.05
radius: height / 5
}
label: Label {
text: button.text …Run Code Online (Sandbox Code Playgroud) 我试图做'font.family'或'anchors.fill'等嵌套属性,但我不能以正常方式初始化它们,因为它打印'无法分配给不存在的属性'.相反,我被迫使用Component.onCompleted方法.怎么了?
MyButtonStyling.qml:
import QtQml 2.1
QtObject
{
property QtObject background: QtObject
{
property color pressed: "#CCCCCC"
property color enabled: "#666666"
property color disabled: "#555555"
}
}
Run Code Online (Sandbox Code Playgroud)
main.qml:
import QtQuick 2.0
Item
{
width: 400
height: 300
MyButton
{
text: "TEST"
styling: MyButtonStyling
{
//background.enabled: "#1B2E0A" //Cannot assign to non-existent property "enabled"
Component.onCompleted:
{
background.enabled = "#1B2E0A" //Works
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
MyButton.qml:
import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0
Button
{
property QtObject styling: MyButtonStyling {}
implicitWidth: 80 …Run Code Online (Sandbox Code Playgroud) 让我们考虑以下示例:我们有一个Qt Quick Controls Button.用户在5秒内点击两次.在Button第一次推送之后,QML Timer正在运行这5秒钟.我们希望测量两次点击之间经过的时间,精确度为毫秒.
不幸的是,QML Timer无法向我们显示经过的时间.
正如BlackBerry论坛上所建议的那样,可以比较日期.但是,这不是很方便,因为第一次点击可能发生在31 Dec 2015, 23:59:55第二次点击,第二次点击1 Jan 2016, 00:00:05,检查必须是复杂的.
还有更好的选择吗?