- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 QML 应用程序(通过属性、Q_INVOKABLE
等)链接到 C++ 代码。我可以使用 qmlscene
在没有大部分 C++ 框架的情况下启动 QML 应用程序,并且没有明显的问题(除了丢失的数据和应该从 C++ 端提供的功能)。
但是,当我构建和部署代码时,我在 QQmlApplicationEngine::load()
调用期间在 Qt 框架内遇到段错误。
我创建了一个简化的“虚拟”应用程序,它似乎会触发完全相同的问题。
C++ 应用程序:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "SigCatcher.hpp" // Proprietary code
int main(
int argc,
char *argv[])
{
SigCatcher sig_catcher; // Just catches signals & prints stacktrace
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(
QUrl(QStringLiteral("qrc:/main.qml")));
return 0;
}
请注意,如果没有 SigCather
,我仍然会遇到段错误,只是没有堆栈跟踪。因此,如果您注释掉 SigCatcher
导入和声明,则此示例是可重现的。
main.qml
:
import QtQuick 2.5
import QtQuick.Controls 1.3
import QtCharts 2.0
ApplicationWindow {
id: winRoot
visible: true
width: 1024 - 24
height: 768 - 80
minimumWidth: width
minimumHeight: height
maximumHeight: minimumHeight
maximumWidth: minimumWidth
ChartView {
id: sparkline
anchors.top: parent.top
anchors.right: parent.right
anchors.left: parent.left
}
}
这里几乎什么都没有,这让我相信 ChartView
类型本身可能有错误。
可能会发生什么?我什至不知道如何调试它;据我所知,在调用 QGuiApplication::exec()
engine::load()
期间使用 console.log
.
编辑: 阐明该应用程序可以与 qmlscene
一起正常工作(我第一次写这个问题时并不知道这一点)。
编辑 2:用显示相同问题的完整非专有示例(堆栈跟踪稍短)替换了之前的示例,该示例由从专有代码中精心挑选的片段组成。
平台信息:Qt 5.5.1 运行在 64 位 Debian 8 上;我的应用程序是使用 GCC 5.1 编译的,但我在 4.9.2 和 Clang 3.7.0 的预发布版本中看到了相同的错误,该版本现在大约有 6 个月了。我也尝试过使用 Qt 5.4.0(这需要导入 QtQuick 2.4
而不是 2.5
)。
堆栈跟踪:
../obj/X64_ATOM/debug/GUI/AucLocalGui2(_ZN22TracePrinterImpl_Linux16Print_stackTraceEv+0x42)[0x401e54]
../obj/X64_ATOM/debug/GUI/AucLocalGui2(_ZN12TracePrinter16Print_stackTraceEv+0x9)[0x401e7d]
../obj/X64_ATOM/debug/GUI/AucLocalGui2(_ZN20SigCatcherImpl_Linux15OnCatch_signal_Ei+0x68)[0x4022c6]
/lib/x86_64-linux-gnu/libc.so.6(+0x35180)[0x7fe0a2234180]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Widgets.so.5(_ZN18QWidgetTextControl14setCursorWidthEi+0x55)[0x7fe0a527fb15]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Widgets.so.5(_ZN18QWidgetTextControlC1EP7QObject+0x5d)[0x7fe0a527fced]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Widgets.so.5(+0x443047)[0x7fe0a53a6047]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Widgets.so.5(_ZNK17QGraphicsTextItem8documentEv+0xd)[0x7fe0a53a633d]
/opt/Qt/5.5.1/5.5/gcc_64/qml/QtCharts/../../lib/libQt5Charts.so.2(+0x63821)[0x7fe098d74821]
/opt/Qt/5.5.1/5.5/gcc_64/qml/QtCharts/../../lib/libQt5Charts.so.2(+0x56cd3)[0x7fe098d67cd3]
/opt/Qt/5.5.1/5.5/gcc_64/qml/QtCharts/../../lib/libQt5Charts.so.2(+0x5727d)[0x7fe098d6827d]
/opt/Qt/5.5.1/5.5/gcc_64/qml/QtCharts/../../lib/libQt5Charts.so.2(+0x597d6)[0x7fe098d6a7d6]
/opt/Qt/5.5.1/5.5/gcc_64/qml/QtCharts/../../lib/libQt5Charts.so.2(+0x5bb7c)[0x7fe098d6cb7c]
/opt/Qt/5.5.1/5.5/gcc_64/qml/QtCharts/../../lib/libQt5Charts.so.2(+0x5fb8f)[0x7fe098d70b8f]
/opt/Qt/5.5.1/5.5/gcc_64/qml/QtCharts/libqtchartsqml2.so(+0x2f044)[0x7fe099072044]
/opt/Qt/5.5.1/5.5/gcc_64/qml/QtCharts/libqtchartsqml2.so(+0x16680)[0x7fe099059680]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(_ZNK8QQmlType6createEv+0x3b)[0x7fe0a436e07b]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(+0x2cf472)[0x7fe0a43cf472]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(+0x2cc85d)[0x7fe0a43cc85d]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(+0x2cd45e)[0x7fe0a43cd45e]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(+0x2cde8e)[0x7fe0a43cde8e]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(+0x2cea8b)[0x7fe0a43cea8b]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(+0x2cfcef)[0x7fe0a43cfcef]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(_ZN20QQmlComponentPrivate11beginCreateEP15QQmlContextData+0x145)[0x7fe0a43592e5]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(_ZN13QQmlComponent6createEP11QQmlContext+0x68)[0x7fe0a4359728]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(_ZN28QQmlApplicationEnginePrivate13_q_finishLoadEP7QObject+0x262)[0x7fe0a43c0de2]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(_ZN28QQmlApplicationEnginePrivate9startLoadERK4QUrlRK10QByteArrayb+0xd2)[0x7fe0a43c1082]
/opt/Qt/5.5.1/5.5/gcc_64/lib/libQt5Qml.so.5(_ZN21QQmlApplicationEngine4loadERK4QUrl+0x1d)[0x7fe0a43c10bd]
../obj/X64_ATOM/debug/GUI/AucLocalGui2(main+0x84)[0x401ae4]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fe0a2220b45]
../obj/X64_ATOM/debug/GUI/AucLocalGui2[0x401959]
最佳答案
给你。您需要引入 Qt Widgets 依赖项:
Note: Since Qt Creator 3.0 the project created with Qt Quick Application wizard based on Qt Quick 2 template uses QGuiApplication by default. As Qt Charts utilizes Qt Graphics View Framework for drawing, QApplication must be used. The project created with the wizard is usable with Qt Charts after the QGuiApplication is replaced with QApplication.
来自 http://doc.qt.io/QtCharts/qtcharts-qmlmodule.html
这与我的猜测一致,即问题出在应用程序主题中,当您使用纯 QML 应用程序 (QGuiApplication) 与更多原生 QtWidgets 应用程序 (QApplication) 时,这是非常不同的。
关于c++ - QtQuick ChartView QML 对象段错误在加载期间导致 QML 引擎段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34099236/
我想放置一些矩形作为叠加层,以在 ScatterSeries 的 ChartView 上显示感兴趣的区域。然而,当我尝试这样做时,它显然使用了与 ScatterSeries 不同的坐标系,因为它是在一
QChart自定义背景画笔和绘图区画笔的官方示例代码:Custom chart example 如何使用 ChartView(Qml 类型)以 Qml 方式实现此目的? 我想像那个示例一样自定义 Qm
我最近开始使用 QML,我正在寻找一种方法来将数据从 C++ 提供到 QML 中的 ChartView。我更喜欢一个解决方案,我可以发送一个带有 Q_PROPERTY 之类的 QMap,以便它自动更新
我正在尝试使用条形图格式在 QLabel 小部件中绘制数据。创建图表后,我使用 chartView->grab() 捕获它以插入到 QLabel 中。这种方法适用于饼图,但对于条形图,不显示子元素(Q
我有一个在 QML 中声明的 ChartView 项,我需要类似橡皮筋的缩放功能。这可以通过半透明矩形和 MouseArea 项目来实现。问题是对于一个矩形,它只能选择从左上角到右下角的区域,因为带有
我正在尝试基于 qtcharts-qmloscilloscope-example here 制作类似 Qt Quick 应用程序的示波器 在此示例中,跟踪(QTQuick ChartView)在 QM
我有一个在 QML 中声明的 ChartView 项,我需要类似橡皮筋的缩放功能。这可以通过半透明矩形和 MouseArea 项目来实现。问题是对于一个矩形,它只能选择从左上角到右下角的区域,因为带有
我正在尝试获取对动态创建的 ChartView 对象的引用。在代码中,当我单击“添加图表”按钮时,您会看到我动态创建了一个图表作为委托(delegate)。 import QtQuick 2.12 i
我有一个由 QXYSeries 表示的散点图,并使用 Qt Charts 5.7 中的 ChartView 查看。 我想将鼠标悬停在绘图上,在一定距离内“悬停”触发,而不是仅当我的光标直接位于点上方时
我一直在关注this example尝试在 QDialog 窗口中创建折线图。而不是使用以下方法将图表添加到 UI: window.setCentralWidget(chartView); 我用这一行
我正在尝试调整 Qt5.9 QML Oscilloscope example从 C++ 推送图形数据而不是从 QML 请求图形数据。以下是 QML 示波器示例中的相关部分。 数据源.h: #ifnde
我的应用程序在 ViewPager 中有多个 Fragment。其中一个片段包含一个 ChartView,当用户滑动移动到相邻片段时,图表会重新绘制和压缩,而不是像预期的那样保持原始宽度。这也垂直发生
我有一个问题,当我在带有图表的 android 平板电脑 (android 7.0) 上启动调试时,我遇到了一个崩溃的应用程序。 所以我的 qt.pro: QT += qml quick core c
我有一个 QML 应用程序(通过属性、Q_INVOKABLE 等)链接到 C++ 代码。我可以使用 qmlscene 在没有大部分 C++ 框架的情况下启动 QML 应用程序,并且没有明显的问题(除了
我很难将 c++ 与 qml 和 QtCharts/Chartview 结合使用。如果有任何建议,我很乐意在这里提出! 问题:我想在QML中的Chartview中添加一个用c++定义的QLineSer
我正在尝试使用 python 将按需系列添加到在 qml 中定义的现有 ChartView。我找到了一个示例,展示了如何在 C++ 中执行此操作(取自 https://doc.qt.io/archiv
我的方法几乎是这样的: 图表.qml: Window { ChartView { id: chartView // ... } Button {
我正在使用图表库创建一些折线图,当没有可用数据时我希望清除图表。该图清除正常并显示其通常的“nodatatext”但是当我尝试再次设置图表时代码在设置数据的行上失败:fastestChartView.
我有一个自定义 QAbstractTableModel 和一个翻转第一个模型轴的代理模型。有了这个工作表,我只需切换模型。当我切换到图表的代理模型时,它会在我将行分配给 QHXYModelMapper
我想在 ChartView QML 对象中创建我自己的特定图表。我的期望是通过在 c++ 中指定例如 QCategoryAxis 而不是在 qml 中调用此函数来获得充分的灵 active 。 首先,
我是一名优秀的程序员,十分优秀!