问题标签 [qtwidgets]
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.
qt - 绘图时 Qt 崩溃,即使在 GUI 线程中
我认为我在重绘 Widget并切换到Qt::QueuedConnection
修复问题时遇到了类似于 Qt 崩溃中的问题。但是,在我的情况下,信号发射器和接收器总是在同一个线程(主线程)中。
我有一个带有条目行的 QAbstractItemModel 和一个用于过滤的 QSortFilterProxyModel。由于模型可能非常大,所以我想在过滤时制作一个进度条。更新过滤器基本上是在连接到QAction::toggled
信号的插槽中执行此操作:
UpdateFilter 基本上做了一些内务处理,然后调用 invalidate,使过滤器模型重新查询filterAcceptsRow
每一行。然后过滤器模型在其中发出filterProgressChanged(int)
信号filterAcceptsRow
(通过递增计数器并除以源模型的行数来工作,并且仅在实际 int 进度值更改时发出)。UpdateFilter 在过滤完成时返回。直到那时进度条才被删除(已验证),所以我认为它应该可以工作。不删除进度条会导致每次调用都会获得一个新的进度条,但崩溃仍然是一样的。
一切都在主线程中完成:创建进度条,调用 UpdateFilter,发出filterProgressChanged
信号。但是,当连接创建为Qt::AutoConnection
,即直接时,它会在重新绘制进度条时崩溃(仅在禁用过滤器时,出于某种原因)。当我直接在我自己的事件处理程序中调用 setValue 时也会发生同样的情况,这是我在切换到当前代码之前所做的。
现在我有一个可行的解决方案,但我不明白为什么原始代码不起作用。我认为只有当信号的发送者和接收者在不同的线程中时,DirectConnection 才会产生实际的差异,但事实并非如此。您可以在堆栈跟踪中轻松看到所有事情都发生在同一个线程中,排队连接也是如此。
那么,原始代码出了什么问题呢?有什么我错过的吗?有没有办法从实际崩溃中获取更多信息?
我只发现 in void QRasterPaintEngine::clip(const QRect &rect, Qt::ClipOperation op)
,state()
返回 0,并且代码假定它永远不会返回 0,这是直接崩溃的原因,但可能不是原因。堆栈跟踪指向绘画作为问题区域,这就是我在调试时所看到的。
我在使用 Qt 5.4.2(也尝试过 5.7)和 MSVC 2013 的 Windows 上,如果有的话。
编辑:根据 code_fodder 的要求,我添加了 UpdateFilter 并发出代码(actualFilterFunction 执行实际的过滤,但与信号或 GUI 或任何东西无关)。
c++ - 如何通过拖动将小部件从 QStackedWidget 移出?
从我的自定义堆叠小部件中实现拖动小部件的最佳方法是什么?
qt5 - Qt 上的 v4l2 覆盖
我们正在开发 ov5640 传感器相机,我们在我们的 ARM 平台(基于 i.Mx6)上启动了相机,并使用 v4l2 覆盖应用程序测试了相机。现在我们需要在 Qt5 中使用那个 v4l2 应用程序。
是否有任何应用程序向我们解释在 Qt 上创建覆盖应用程序 (v4l2) 的方法?这会很有帮助。我们想在 Qt 小部件(640x480)小部件中显示覆盖。
任何参考来源或方法学手段都会有所帮助。
c++ - 如何为 QTreeView resizeColumnToContents 设置最大宽度?
我在用着QTreeView::resizeColumnToContents(int column)
但即使在那之后我也在做类似的事情
它不起作用,我怎样才能在那里设置最大宽度?
qt - 更改默认应用程序字体
我有一个解析一些 JSON 文件并输出其内容的 Qt 应用程序。我希望输出采用等宽字体,最简单的方法是将整个应用程序的默认字体更改为等宽字体。我如何在 Qt 中做到这一点?
android - 带有自定义 QListWidgetItem 的 QListWidget 行大小
使用 Qt Designer,我创建了一个Item
继承自 的类QWidget
,并添加了一些小部件。然后,再次使用 Qt Designer,我创建了一个MainWindow
from QMainWindow
,并添加了一个QListWidget
名为 的对象list
和一个QPushButton
called pushButton
。
上MainWindow::MainWindow(QWidget *parent)
,我添加到默认代码:
ui->list->setSizeAdjustPolicy(QListWidget::AdjustToContents);
在 void 上MainWindow::on_pushButton_clicked()
,我写道:
项目 *my_item = 新项目(这个);
QListWidgetItem * item = new ListWidgetItem();
项目->setSizeHint(QSize(0, 400)); </p>
ui->list->addItem(item);
ui->list->setItemWidget(item, my_item);
在我的笔记本上运行的 Linux Ubuntu 上进行测试,一切顺利,但是当我在我的 Android Moto G4 手机上运行时,Item
插入的对象list
始终无法正确显示。使用 400 insetSizeHint
可以显示小部件,但在底部剪切。例如,使用 100 会使小部件被挤压,无法阅读。
有谁知道如何使它工作?
谢谢!!
pyside - “模块使用 python34.dll 与此版本的 Python 冲突”
我对 Python 的了解还是很基础的,我现在才开始思考如何在 Maya 中使用/调用库。(因为我需要从 QT Designer 创建一个基本 UI,并在将其转换为 .py 文件后在 Maya 中打开它)
在我学会了正确地将 .ui 转换为 .py 之后,我现在在 Maya 中遇到了这个错误
“模块使用 python34.dll 与此版本的 Python 冲突”
我尝试遵循此处和此处所说的内容,但即便如此 - 在设置这些环境变量之后......
PYTHONHOME = C:\Program Files\Autodesk\Maya2016\bin\maya.exe
PYTHONPATH = C:\Python34
...我仍然无法运行基本的 .py 文件。事实上 - 只要 PYTHONHOME 变量有效,Maya 中的 Python 就不再执行任何操作。
下面的代码是我从 QT Designer 中转换保存的 .ui 文件得到的 Python 文件。
我遇到了一些建议使用 PySide 的不同在线注释,并且在尝试使用后:
我仍然无法测试这是否有效,因为显然 QtWidgets 不是模块?
我很迷茫。更大的图景是我只想能够从 Maya 的脚本编辑器中运行从 QT Designer 创建的 ui。我不知道从哪里开始学习图书馆。这里有人好心给点建议吗?
附加信息:
感谢您的时间。
c++ - 'virtual bool QAbstractScrollArea::eventFilter(QObject*, QEvent*)' 受保护
我试图用谷歌找到这个问题的答案,但没有任何结果。我正在将应用程序从 Qt4 转换为 Qt5。该应用程序在 Qt4 中完美编译,但是当我现在尝试针对 Qt5 进行编译时,它给了我这个权限错误。由于这个类的状态在两个版本中都受到保护,我很难理解我需要改变什么。
这个编译问题已在几个不同的 Ubuntu 安装(包括 wsl)上复制,但我还没有在 Fedora 中尝试过。
这是该类的一个子集
编辑:
这是有问题的方法。