问题标签 [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.

0 投票
0 回答
142 浏览

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 或任何东西无关)。

0 投票
0 回答
318 浏览

c++ - 如何通过拖动将小部件从 QStackedWidget 移出?

从我的自定义堆叠小部件中实现拖动小部件的最佳方法是什么?

0 投票
1 回答
3278 浏览

qt - 如何根据布局大小更新 QGridLayout 行/列数?

好吧,这件事对我来说似乎很基础,虽然我找不到任何关于如何实现它的信息。

假设我有某种QGridLayout包含相同大小的小部件。现在我想根据布局大小更新它的行/列数。

因此,例如在相对较宽的屏幕上,它看起来像这样:

宽屏

但如果屏幕不够宽,无法容纳所有项目,它会像这样垂直增长:

窄屏

0 投票
0 回答
536 浏览

qt5 - Qt 上的 v4l2 覆盖

我们正在开发 ov5640 传感器相机,我们在我们的 ARM 平台(基于 i.Mx6)上启动了相机,并使用 v4l2 覆盖应用程序测试了相机。现在我们需要在 Qt5 中使用那个 v4l2 应用程序。

是否有任何应用程序向我们解释在 Qt 上创建覆盖应用程序 (v4l2) 的方法?这会很有帮助。我们想在 Qt 小部件(640x480)小部件中显示覆盖。

任何参考来源或方法学手段都会有所帮助。

0 投票
1 回答
309 浏览

layout - QT-Creator 相当于 WinForms Dock-Fill 是什么?

我有一个QTreeView小部件放在里面QDockWidget

在此处输入图像描述

我想设置 的属性QTreeView,它会自动填充整个可用的客户端绘图区域(类似于 WinForms DockFill 属性)。

QT-Designer如何实现这一点?


注意:我一直在玩弄QTreeViews sizePolicy属性。如果这些设置为扩展(默认情况下),则接受的答案开箱即用。

0 投票
1 回答
761 浏览

c++ - 如何为 QTreeView resizeColumnToContents 设置最大宽度?

我在用着QTreeView::resizeColumnToContents(int column)

但即使在那之后我也在做类似的事情

它不起作用,我怎样才能在那里设置最大宽度?

0 投票
2 回答
20215 浏览

qt - 更改默认应用程序字体

我有一个解析一些 JSON 文件并输出其内容的 Qt 应用程序。我希望输出采用等宽字体,最简单的方法是将整个应用程序的默认字体更改为等宽字体。我如何在 Qt 中做到这一点?

0 投票
0 回答
756 浏览

android - 带有自定义 QListWidgetItem 的 QListWidget 行大小

使用 Qt Designer,我创建了一个Item继承自 的类QWidget,并添加了一些小部件。然后,再次使用 Qt Designer,我创建了一个MainWindowfrom QMainWindow,并添加了一个QListWidget名为 的对象list和一个QPushButtoncalled 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 会使小部件被挤压,无法阅读。

有谁知道如何使它工作?

谢谢!!

0 投票
1 回答
13140 浏览

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。我不知道从哪里开始学习图书馆。这里有人好心给点建议吗?

附加信息:

感谢您的时间。

0 投票
1 回答
256 浏览

c++ - 'virtual bool QAbstractScrollArea::eventFilter(QObject*, QEvent*)' 受保护

我试图用谷歌找到这个问题的答案,但没有任何结果。我正在将应用程序从 Qt4 转换为 Qt5。该应用程序在 Qt4 中完美编译,但是当我现在尝试针对 Qt5 进行编译时,它给了我这个权限错误。由于这个类的状态在两个版本中都受到保护,我很难理解我需要改变什么。

这个编译问题已在几个不同的 Ubuntu 安装(包括 wsl)上复制,但我还没有在 Fedora 中尝试过。

这是该类的一个子集

编辑:

这是有问题的方法。