问题标签 [qt6]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
78 浏览

c++ - Wy 是 QMetaObject::invokemethod 从错误对象中搜索函数

在我的工作项目中,我遇到了一种特别奇怪的行为。在运行时,当调用 QMetaObject::invokeMethod 时,我得到一个打印,表明程序正在尝试从 QObject 中找到指定的方法,而不是我给它的指针指向的实际类。更奇怪的是,我制作了一个模型,在我看来,它的功能与代码本身的功能大致相同,不同之处在于模型实际上做了预期的事情。我找不到两者之间有意义的差异,也无法弄清楚为什么我的代码无法正常运行。

请原谅所示代码中的一些不良做法。由于与此问题无关的原因,我被迫编辑部分代码,主要是类和库的名称,并且在维护实际代码中的质量方面做得不是很好。这对实际功能没有影响,只有可读性。

我会根据要求提供模型的代码,但这个代码实际上是我遇到问题的代码,所以我觉得添加 g 只会导致不必要的膨胀。

编辑

我是个笨蛋,忘记包含错误消息。请注意,这也与代码库类似地编辑(即类名和一些函数名已更改)

QMetaObject::invokeMethod: No such method QObject::simpleRx(QString,int,client*)

编辑#2 好的,所以问题的根源是主机中缺少 Q_OBJECT 宏。现在我收到一个“QMetaMethod::invoke: Unable to handle unregistered datatype 'int&'”错误,我将在接下来进行研究。

主文件

主控制器.h

主控制器.cpp

客户端.h

客户端.cpp

主机.h

主机.cpp

CMakeLists.txt

我在 Ubuntu 20.04 上运行 Qt 6.1.0

请询问您需要的任何更多详细信息,如果可以,我会提供。

非常感谢您的帮助。

0 投票
0 回答
97 浏览

c++ - 正在添加 QT QStringList 数据存储 JSON 数据

简而言之,正在发生的事情是我正在制作QStringList对象,然后在前面手动添加一个名为“项目类型:”的条目。然后我从 JSON 文件中获取数据并将其添加到QStringList. 然后使用 a 的addItems功能为用户qcombobox做出QStringList选择选项。

当我拨打电话时,我的问题就来了addItems。它确实将项目中的项目添加QStringList到组合框中,但是当调用该行时,它还会将“项目类型:”(手动添加)添加到我的 JSON 数据中。这让我感到困惑,我不确定为什么会这样。我将在下面进行更详细的介绍。

我有一个 JSON 文件,其中包含一些必须读取的信息才能使我的程序正常工作。我正在使用nlohmann 的 JSON来解析文件中的数据。下面的代码读取数据并将 JSON 数据放入变量中js

我的 JSON 文件将如下所示:

我还使用 QT 6 为用户构建 GUI。代码如下所示:

getKeys函数如下所示:

我知道该profileName变量可能令人困惑,但只知道用户可以选择不同的配置文件,这些配置文件将根据用户选择加载不同类型的数据,但与我的问题无关。对于此示例,profileName将是“测试”

对于此示例,该getKeys函数将返回一个"Item Types:","Item1","Item2". 然后当该ui->item_comboBox->addItems(itemKeyList);行被调用时,我存储的 JSON 数据js会变成:

经过长时间的解释,我的主要问题是如何/为什么调用 QT 函数会更改与 JSON 变量关联的数据?如何更改它以使其不会对其产生影响?

0 投票
2 回答
115 浏览

c++ - QList如何, QList在 Qt6 中检索数据?

我已经使用 Qt 5.15 做了几个月的一些基本工作。

在 Qt5 中,已知 QList 和 QVector 是 2 个不同的容器:

  • QList 会将其原始数据连续存储在内存中(只要每个元素的大小 <= sizeof(void*));否则,它将存储指向堆中实际数据的连续指针块。

  • 另一方面,QVector 将其数据连续存储在内存中。

在 Qt6 中,QList 和 QVector 将被合并;这意味着现在 QList(在 Qt6 中)的行为将与(Qt5)中的 QVector 完全相同;并且原始的 QList (Qt5) 将被删除。

很容易看出,在 Qt 5 中QList<int>应该与 ; 相同QVector<int>。同时, QList<QByteArray>, QVector<QByteArray>; 或者QList<QString>QVector<QString>应该完全不同(?),因为据我了解,QList 将存储指针(并使用堆来存储数据),同时 QVector 将存储来自所有元素的原始数据。

所以,说(我还在谈论 Qt5),我有QVector<QString> a("");然后我追加,并对其进行处理以获得从 a.at(0) 到 a.at(99) 的 100 个元素。如果我想检索第 50 个数据,我将执行 a.at(49); 但是我的程序如何检索数据?它会从块的开头读取,直到它到达第 50 个元素吗?如果是这样,那么检索数据的速度不是 O(1);而且它一点也不;与这里的描述相矛盾:

https://doc-snapshots.qt.io/qt6-dev/qlist.html#details

QList 是 Qt 的通用容器类之一。它将其项目存储在相邻的内存位置并提供基于索引的快速访问

我知道如果它是一个Qt5 QList,那么它应该从一开始就偏移内存以获得指向我的第50个元素的指针,并读取存储在QList中存储的第50个元素指针指向的地址处的原始数据;这将花费 O(1) 时间(这很快)。

我的问题是,在 Qt6 中,如何QList<QString>考虑在这种情况下提供基于索引的快速访问?我在这里错过了什么吗?

提前非常感谢你,:D

0 投票
0 回答
468 浏览

qml - 在 qml 中用什么代替 TreeView?

由于 qt 6.0 TreeView 在 QML 中已被弃用。我可以用什么代替它?或者我如何在 QML 中使用 C++ QTreeView。或者如何实现我自己的TreeView?

0 投票
1 回答
61 浏览

qt - qt6:将 QFileDialog::filesSelected 连接到插槽

本质上,我想在我的 QFileDiag 选择了 1 个或多个文件并被接受(单击“打开”按钮)后触发一些代码,问题是我似乎无法真正触发插槽中的代码。

这是我的主要小部件中的代码

这是标题声明

我已经尝试连接到两者connect_test,并且connect_test2当我运行我的应用程序并选择文件时,点击打开,没有任何反应。

0 投票
1 回答
389 浏览

c++ - 将 Qt 工具扩展与 Visual Studio 2019 一起使用,我遇到了很多错误

我下载了 Qt6.1.2,在 Visual Studio 2019 中安装了 Qt 工具扩展,并添加了版本的路径。每当我开始一个新的 Qt 小部件应用程序项目时,我都会遇到很多这样的错误:

abc 错误(活动) E2783 需要逗号(在此模式下未启用 static_assert 的单参数版本) Project_Name C:\Qt\6.1.2\msvc2019_64\include\QtCore\qanystringview.h
或这个

abc 错误(活动) E0325 内联说明符仅允许用于函数声明 Project_Name C:\Qt\6.1.2\msvc2019_64\include\QtGui\qrgb.h

对于记录,Qt 创建者工作得很好,但我需要在 Visual Studio 上编写代码。

0 投票
0 回答
93 浏览

c++ - Qt Designer 5.11.1 未将字体粗细设置为正确的类型

运行 cmake 时出现以下错误:

有问题的代码在这里:

解决方法是更改​​ font.setWeight(75); 到 font.setWeight(QFont::Weight(75)); 我可以很容易地做到这一点。但是,这是生成的代码,不应更改。这是 Qt Designer 的错误吗?我可以在 Qt Designer 中做些什么来解决这个问题(也许使用样式表)?这在 Qt Designer 的更高版本中修复了吗?

0 投票
0 回答
38 浏览

qt - QPushButton 单击不适用于触摸控制器驱动程序 st1232

我正在尝试使用运行 openstlinux 5.4 的 stm32mpu 运行 crystalfonts lcd cfaf240320a0024sc ( https://www.crystalfontz.com/product/cfaf240320a0024sc-240x320-full-color-touchscreen-tft-2-4 )

触控控制器与 Linux 内核中的 st1232 触控面板驱动程序兼容。

我正在使用 ST SDK 使用 Qt6 交叉编译

我已经定义了一个非常简单的 UI,其中 QTabWidget 有两个页面,每个页面上有一个 QPushButton。

当我单击选项卡时,它可以工作,并更改选项卡当我单击按钮时,它不起作用。

不打印任何调试消息。我可以看到按钮被按下的动画,但没有“点击计数器!” 在控制台上。

为什么会这样?

更新

如果我使用 QPushButton::pressed 而不是单击它可以工作。但问题是为什么没有发出点击信号?

0 投票
1 回答
38 浏览

python - 尝试在 Qt6 中等待线程时显示关闭倒计时

现在我的应用程序中的所有内容都非常简单,因为我刚刚开始构建它。最后可能会有两个线程可能会运行很长时间。不是因为他们有很多计算要做,而是因为我必须不断地监听 COM 端口并记录数据。

现在在正常操作期间,这不是问题,因为它做了它应该做的事情。现在可能会发生,尽管用户想要在测量完成之前关闭应用程序并且线程仍在运行。

我也得到了这个工作,但是我不确定我的方法是否正确。

我不想使用终止,因为我不确定未正确关闭的 COM 端口和其他事情发生了什么。

由于线程关闭可能需要一段时间(即使在我的简单循环线程上也需要几秒钟),我想显示一些小倒计时来告诉用户是的,关闭正在发生,只需要几秒钟。

我试图在主小部件的 QtextEdit 中显示它。但我认为这不起作用,因为我已经在我的方法中的 closeEvent 中。我还没有尝试额外的 QDialog 弹出窗口,但我想由于相同的原因它也不会工作。

有没有办法让这样的事情发生,以防止用户认为程序已经崩溃?

所以这就是我已经走了多远:

我的工人对象:

我开始线程的地方:

最后是我猜想当用户按下 x 按钮时发生的主应用程序的关闭事件。

另一个问题是,如果线程不再运行,关闭时会出错,因为线程已经被删除。我可以通过使用线程的完成信号设置另一个变量并检查它来解决这个问题。

也许有更好的方法来做到这一点。也让我能够展示我想到的这个倒计时的东西。


编辑:

好的,我尝试了一些事情,它可能很愚蠢,但它似乎是这样工作的。我认为我不妨让线程和工作人员保持活动状态直到程序结束,因为它们无论如何都不会改变并且可能会重新启动。因此,如果我让它们保持活动状态,它可能会占用更多内存,但重新启动工作人员也会更快,因为它们还活着。

所以我删除了 deleteLater 信号连接,而是在 closeEvent 中手动调用它们:

我仍然无法显示某种消息来通知用户关闭过程(.append 不再显示)。关闭似乎工作得更快一些,并且“完成”信号仍然由工作人员正确发出。

0 投票
1 回答
619 浏览

c++ - Qt6 中的端口 QRegExp::exactMatch()

我正在将 Qt5 应用程序移植到 Qt6。我想尽快离开 Qt6 的 Qt5CoreCompat 模块。我的问题是QRegExp应该用类替换的QRegularExpression类。大多数补丁都相对微不足道,但我如何QRegExp::exactMatch()在 Qt6 中移植。这是应用程序中的一些代码:

我看不到在QRegularExpressionMatch课堂上这样做的方法。我想解决方案可能是这样的:

我想要和以前一样的行为。