我有一个通过QML文件指定的小部件.此小部件包含一个Rectangle包含两个的顶级Columns.每个都Columns包含许多Text元素.这个QML小部件包装QDeclarativeView在C++ 的子类中.
我想为每个Text元素指定字体.今天我通过指定顶级属性来做到这一点:
property string fontfamily: "Arial"
property bool fontbold: false
property bool fontitalic: false
property int fontpixelsize: 11
property string fontcolor: "White"
Run Code Online (Sandbox Code Playgroud)
并将每个Text元素绑定到这些属性:
Text
{
color: fontcolor
font.family: fontfamily
font.bold: fontbold
font.italic: fontitalic
font.pixelSize: fontpixelsize
...
}
Run Code Online (Sandbox Code Playgroud)
这不是很优雅,每次我需要支持新的东西时都需要添加新的字段(例如带下划线的字体).我无法声明类型的属性font并绑定到此属性(小部件是空白的,qmlviewer警告"属性后的预期类型").
是否有更好的方法为所有Text元素指定字体?
注意!我正在手写QML文件.
我有一个Qt功能:
void MainWindow::button_clicked(Qstring a, Qstring b, Qstring c, Qstring d)
Run Code Online (Sandbox Code Playgroud)
我从QML收集数据,我想将数据传递给Qt中的这个函数.所以我知道我需要使用Q_INVOKABLE但不知道如何使用它.
还有一件事是,当调用上面的某个函数时,可以调用其他函数.
例如:我调用上面的函数,但在她的身体中我调用refresh()函数.这可能吗?
我正在使用QML和Qt Creator构建桌面应用程序,我目前正在研究键盘处理以及它如何与QML元素一起工作.我已经意识到桌面小部件缺少适当的QML替换.
我目前的问题是,我希望为一些特定的QML组件分配一些全局键盘快捷键(比如为GUI上的按钮分配键盘快捷键),这些快捷键应该激活它们.我能管理的最好的是使用FocusScopes和Key Navigation能够通过键盘导航GUI,但这不是一回事.
任何人都可以建议在这种情况下做什么?Qt 5有没有这样的功能?我在互联网上找不到任何相关信息.
我和我的团队正在合作一个项目.我的工作是为嵌入式系统创建一个带有QML和C++的Gui.
我为每个View都有一个qml文件.
但现在我想在它们之间导航.这意味着当我点击按钮时,视图应该切换.每个视图都有一个后退按钮,所以我可以回到我的主视图.
这可能在qml中吗?如果不是我必须用c ++解决它
我在Windows7上用c ++ qnd Qt Creator(QML)编写了一个Qt Quick Desktop应用程序.现在我必须部署它,我需要隐藏qml文件和图像(意思是:将它们放在资源等中)
我已经读过使用.qrc文件有一个很好的方法.我阅读了有关这些文件的文档,并为我的应用程序创建了一个文件,如下所示:
<RCC>
<qresource prefix="/">
<file>qml/GenericHostApplicationQML/myMain.qml</file>
<file>qml/GenericHostApplicationQML/content/PressAndHoldButton.qml</file>
<file>qml/GenericHostApplicationQML/content/TextButton.qml</file>
<file>qml/GenericHostApplicationQML/content/pics/advancedsettings.png</file>
<file>qml/GenericHostApplicationQML/content/pics/cnruninstall.png</file>
<file>qml/GenericHostApplicationQML/content/pics/dialog_cancel.png</file>
<file>qml/GenericHostApplicationQML/content/pics/folder_explore.png</file>
<file>qml/GenericHostApplicationQML/content/pics/gnome_session_switch.png</file>
<file>qml/GenericHostApplicationQML/content/pics/mail2_send.png</file>
<file>qml/GenericHostApplicationQML/content/pics/Picture1.png</file>
<file>qml/GenericHostApplicationQML/content/pics/Picture2.png</file>
</qresource>
Run Code Online (Sandbox Code Playgroud)
在main.cpp中,我正在加载Main.qml文件,如:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QDeclarativeView view;
view.setSource(QUrl::fromLocalFile("qml/GenericHostApplicationQML/myMain.qml"));
view.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我试图从Resources.qrc中读取myMain.qml文件,如:
view.setSource(QUrl(":/qml/GenericHostApplicationQML/myMain.qml"));//I added the ":/"
Run Code Online (Sandbox Code Playgroud)
但我有这个错误:
file:///qml/GenericHostApplicationQML/myMain.qml: File not found
Run Code Online (Sandbox Code Playgroud)
当我尝试这个:
view.setSource(QUrl::fromLocalFile(":/qml/GenericHostApplicationQML/myMain.qml"));
Run Code Online (Sandbox Code Playgroud)
我明白了:
file:///C:/Users/ayalafre/Desktop/ghaQML/GenericHostApplicationQML-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Release/:/qml/GenericHostApplicationQML/myMain.qml: File not found
Run Code Online (Sandbox Code Playgroud)
好像我的Qt不知道该怎么办:":/".
我必须使用.qrc文件:
你能解释一下有什么问题吗?以及为了在c ++和qml中使用.qrc我必须做些什么?
非常感谢:)
是否有可能将一个MouseAreapositionChanged事件传播给一个基础事件?
我试图设置mouse.accepted到false为最上面的任何现有的信号处理程序MouseArea,以及设置propagateComposedEvents到true.这些都没有起作用(虽然我对propagateComposedEvents并不工作并不感到惊讶,因为文档说它只传递类似的事件clicked,doubleClicked和pressAndHold).
我有一个包含以下内容的QML文件:
Text {
id: testData
onTaskClicked:{
testData.text = task.name
}
}
Run Code Online (Sandbox Code Playgroud)
捕获是这个任务点击信号.它由另一个小部件(C++)发出,需要中继到QML.
这类似于这个SO问题,除了那里发布的解决方案不起作用(为什么写在下面).
C++代码:
ctxt->setContextProperty(QLatin1Literal("holiday"), m_model);
ctxt->setContextProperty(QLatin1Literal("bgcolor"), color);
view->setResizeMode(QQuickView::SizeRootObjectToView);
auto mainPath = QStandardPaths::locate(QStandardPaths::DataLocation,
QLatin1Literal("taskview.qml"));
view->setSource(QUrl::fromLocalFile(mainPath));
ctxt->setContextProperty(QLatin1Literal("viewer"), m_view);
Run Code Online (Sandbox Code Playgroud)
m_view是一个QListView发出taskClicked(HolidayTask* task)信号的子类(来自.h文件):
Q_SIGNALS:
void taskClicked(HolidayTask* task);
Run Code Online (Sandbox Code Playgroud)
color并m_model在QML注册并在其他地方使用.来自信号的对象已经在QML中注册.view是我的QQuickView.
首先,我尝试了上述问题中提出的解决方案:
auto root = view->rootObject();
auto myElement = root->findChild<QObject*>(QLatin1Literal("testData");
connect(m_view, SIGNAL(taskClicked(HolidayTask* task), myElement,
SLOT(taskClicked(HolidayTask* task);
Run Code Online (Sandbox Code Playgroud)
但是,myElement始终为null(我得到关于不存在的插槽的运行时警告).
如果我尝试将视图(QListView)指针设置为QML视图的上下文属性,它仍然不起作用.
在所有情况下,我也得到:
QML Connections: Cannot assign to non-existent property "onTaskClicked"
Run Code Online (Sandbox Code Playgroud)
我可能在这里做错了什么?
编辑澄清一些细节:HolidayTask是自定义QObject子类,信号 …
我在QML中设计了一个布局,以了解有关其功能的更多信息,并在设计此类布局时对"最佳实践"有一些疑问.这里是:

它本质上是一个由三个RowLayout组成的ColumnLayout,每个RowLayout都有一些Rectangle s.应计算每个Row和Rectangle的大小,例如:
我想出的QML正在发挥作用,如下所示.我有一些问题:
这是我的布局QML代码:
ApplicationWindow {
x: 500
y: 100
width: 250
height: 150
visible: true
ColumnLayout {
anchors.fill: parent
spacing: 0
RowLayout {
spacing: 0
Layout.preferredHeight: 0.4*parent.height
Layout.fillHeight: false
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
color: "red" …Run Code Online (Sandbox Code Playgroud) 我正在尝试更多地了解QtQuick和QML.我目前的目标是了解如何将数据从C++模型绑定到我的视图.到目前为止,我已经能够在我的QML中设置模型并从模型中获取数据,但我无法弄清楚如何更新我的数据.
如何为我的C++模型设置双向绑定?下面是我到目前为止编写的代码.
message.h
class Message : public QObject
{
Q_OBJECT
Q_PROPERTY(QString author READ getAuthor WRITE setAuthor NOTIFY authorChanged)
Q_PROPERTY(QString message READ getMessage WRITE setMessage NOTIFY messageChanged)
Q_SIGNALS:
void authorChanged(QString author);
void messageChanged(QString message);
public:
Message(QObject *parent = 0);
QString getAuthor();
void setAuthor(QString author);
QString getMessage();
void setMessage(QString message);
private:
QString _author;
QString _message;
};
Run Code Online (Sandbox Code Playgroud)
message.cpp
#include "message.h"
Message::Message(QObject *parent) : QObject(parent)
{
}
QString Message::getAuthor()
{
return _author;
}
void Message::setAuthor(QString author)
{
if(author != _author)
{
_author = author; …Run Code Online (Sandbox Code Playgroud)