如何使用复选框改变QGraphicsView的背景?
在此代码中,它更改QGraphicsView背景.当我设置checkBox检查false时.我需要为普通默认方式设置QGraphicsView.我该怎么做. 这是我的代码: mainwindow.cpp #include "mainwindow.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { scene = new Scene(this); scene->setSceneRect(10,10,260,200); view = new QGraphicsView(scene); setCentralWidget(view); } mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include
2 2024-03-27
编程技术问答社区
使用drawBackground在QGraphicsView上画背景
我试图在QGraphicsView/Scene上绘画和绘画有一个问题.我正在画一堆QLineF as background overriding qgraphicsview ::缺点.但是,当我尝试更改背景颜色时,什么都不会发生. 这是我在做什么的最小示例: import sys import platform import ctypes from PySide import QtCore, QtGui from mygv import Ui_Dialog import sys class myView(QtGui.QDialog): def __init__(self, parent = None): QtGui.QDialog.__init__(self, parent) self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.view.drawBac
2 2024-03-26
编程技术问答社区
在Qt中使用QGraphicsScene和QGraphicsView开始一个基于瓷砖的游戏
我将开始在QT中编程一个基于2D图块的游戏,并阅读旨在显示和处理许多2D对象的QGraphicsScene和Qgraphicsview类. 我的问题是,使用QGraphicsScene创建一个瓷砖的世界是可行的吗?我可以一次添加整个世界,还是应该尝试实施一些限制该区域的东西?我读过QgraphicsScene可以处理"成千上万个项目",但是2D瓷砖地图很容易得到真正,非常大(200x200瓷砖?不是很多,但这已经是40,000个对象). . 该地图也将几乎是静态的,因此可以将其绘制为一个大型PixMap,但这确实使您无法在Qgraphicsscene中使用所有精美的东西,例如处理鼠标单击独立项目等.我将绘制玩家,NPC等,这将与瓷砖网格不符.是否有一些优化的东西用于使用大量静态对象和一些动态对象? 根本不使用Qgraphicsscene和Qgraphicsview,还是一个好主意,或者我应该尝试在QT中寻找替代方案,或者也许是一个不同的,更面向游戏的库? 预先感
18 2024-01-08
编程技术问答社区
根据缩放级别渲染 QGraphicsScene
是否有一种(快速?)仅根据视图缩放级别渲染图形示例项目的子集?我有一个带有许多网格线条的大型场景,当变焦更改以避免"网格完全填充场景"效果时,我想隐藏/显示其中一些. 网格线使用图形学的addline方法绘制. P.S.也许,最简单的方法是在其他地方绘制网格(如那样的视图或SMTH),因为从逻辑上讲,它们不是我场景的一部分,它们只是指导线吗?但是我不知道哪种方法更有效. 解决方案 不建议创建这样的网格,因为您将制作许多会影响场景BSP树的对象,因此它会很快变慢.它也将使您像您描述更困难的LOD变焦. 我会覆盖QGraphicsView::drawBackground(QPainter* painter, const QRectF& rect),并在场景坐标中使用视图的边界来计算您想要多少网格线以及它们在哪里.然后只是绘画作为正常的绘画操作. 您必须将更新模式设置为QGraphicsView::FullViewportUpdate否则您将在网格渲染中获得伪像
4 2023-12-26
编程技术问答社区
如何在QGraphicsView中启用平移和缩放功能
我正在使用Python和QT设计师来实现加载TIFF图像,并启用PAN和放大一些鼠标事件(Wheel -Zoom,Zoom,按Wheel -Pan). 我正在研究一些可以使用图像等的选项和课程,到目前为止,我发现: qgraphicsscene,qimage,qgraphicsview 我有三个类(仅测试) vieverdemo 具有 qgraphicsView 元素: """description of class""" # Form implementation generated from reading ui file 'GraphicsViewdemo.ui' try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s class U
14 2023-12-26
编程技术问答社区
Qt图形视图 , 显示图像 ! , 小工具
这是我的代码: void MainWindow::on_actionOpen_Image_triggered() { QString fileName = QFileDialog::getOpenFileName(this,"Open Image File",QDir::currentPath()); if(!fileName.isEmpty()) { QImage image(fileName); if(image.isNull()) { QMessageBox::information(this,"Image Viewer","Error Displaying image"); return; } QGraphicsScene scene; QGraphicsView view(&scene);
8 2023-11-19
编程技术问答社区
Qt GUI开发-使用QGraphicsView显示2D网格
我是QT开发的新手,因此我正在尝试研究需要设计的用户界面的解决方案.我的项目是在在线游戏中模拟玩家围绕全球地图移动.为了表示地图,我需要显示一个2D网格,而网格中的每个空间都代表地图的区域.然后,我需要显示游戏中每个玩家的位置.后端全部工作,地图将其实现为2D数组.我只是坚持如何显示网格. 我所做的研究使我相信Qgraphicsview是做到这一点的最佳方法,但我似乎找不到与所需内容相关的教程.如果有人有任何有关如何实施此项的提示,将不胜感激. 谢谢,丹 解决方案 2D网格不过是一组水平和垂直线.假设您有一个500x500的地图,并且要绘制一个网格,其中两个方向的线之间的距离为50.随后的示例代码显示了如何实现它. // create a scene and add it your view QGraphicsScene* scene = new QGraphicsScene; ui->view->setScene(scene); // Add the ver
62 2023-11-10
编程技术问答社区
如何对 qt 图形视图部件/项目进行单元测试
我有一个应用程序,可以广泛使用QT4中的GraphicsView架构,我想开始对UI组件的自动测试,但是我找不到与 的任何资源,我应该在测试什么或如何测试基于QGraphicsView/QgraphicsWidget类? 解决方案 我一直遇到问题,试图对测试qgraphicsview进行单位.我最大的问题是 QTest::mousePressEvent(view, Qt::LeftButton, 0); 导致 鼠标事件" Mousepress"未被接收小部件接受 将其写入控制台,而我的活动处理程序从未被打电话.我发现的解决方案是将事件发送到视口,而不是qgraphicsview本身: QTest::mousePressEvent(view->viewport(), Qt::LeftButton, 0); 将事件发送到我的QGraphicsView子类.这应该让您从高级测试整个图形视图,以确保您的图形项目适当地接收事件. 现在,解决您的真实问题
4 2023-11-07
编程技术问答社区
如何使用 QGraphicsView 的 translate() 函数?
在这里,我有一个场景和一个相关的视图,然后我在场景坐标中担任位置.我想将视口设置为位置.我该怎么做?我尝试使用Translate()函数,但它不起作用? view->translate(10, 10); 视口应使用delta x 10和delta y 10移动,但它不起作用! 解决方案 您需要将图形视图的转换锚定模式设置为noanchor. setTransformationAnchor(QGraphicsView::NoAnchor); 这阻止了图形视图删除其他锚模式(锚viewcenter,anchorunderMouse)所预期的翻译. 其他解决方案 中心 如所述 frank osterfeld ,为了以给定的位置将视口居中,您可以简单地使用函数 centeron . 翻译 但是,为了翻译您的视口,它存在另一种改变您的滚动位置的方式: // Your graphics view QGraphicsView *view;
6 2023-10-25
编程技术问答社区
QGraphicsView和QGraphicsItem:缩放视图矩形时不缩放项目。
我正在使用QT的QGraphicsView - 和QGraphicsItem - subclasses. 是否有一种方法可以在更改视图矩形时在视图中不扩展项目的图形表示形式,例如放大时.默认行为是我的项目与我的视图矩形相关. 我想可视化2D点,该点应由薄矩形表示,该矩形在视图中放大时不应扩展.请参阅典型的3D建模软件以获取参考,其中始终以相同大小显示顶点点. 谢谢! 解决方案 将QGraphicItem的标志QGraphicsItem::ItemIgnoresTransformations设置为true不适合您? 其他解决方案 我遇到了同样的问题,我花了一段时间才弄清楚了这一点.这就是我解决的方式. 扩展了Qgraphictem类,Override Paint(). 在油漆()内部,将转换的缩放系数重置为1(M11和M22),并在重置之前保存M11(X缩放系数)和M22(Y缩放系数). 然后,像通常这样做的那样绘制,但用M11和y将X乘以M22.这避免了
12 2023-10-25
编程技术问答社区
QGraphicsScene 中的文本
如何在qgraphicsscene中的某个索条中写文本?我试图这样做,但没有成功.文字有黑色边界,但在字母内部是白色的,我不能将其变成黑色. QPainterPath path; QFont font; font.setPixelSize(50); path.addText(100, 50, font, tr("Hello World!!!")); path.setFillRule(); m_graphScen->addPath(path); 解决方案 变体1(不是一个好的): QFont font; font.setPixelSize(10); font.setBold(false); font.setFamily("Calibri"); path.addText(100, 50, font, "Hello World!!"); m_graphScen->addPath(path, QPen(QBrush(
10 2023-10-18
编程技术问答社区
QGraphicsView/QGraphicsScene图像尺寸
我想在qgraphicsscene中显示在qgraphicsview中.我的代码非常基本: QGraphicsScene* scene = new QGraphicsScene(this); scene->addPixmap(QPixmap(qApp->applicationDirPath() +"/france.gif")); ui->myGraphicsView->setScene(scene); ui->myGraphicsView->fitInView(scene->sceneRect()); 我的问题是我的图片尺寸错误.它很小,比例错误,并且在我的GraphicsView的中心.使用Qdebug i Kwow,我的图片已成功负载,并且大小约为100x800px.我的GraphicsView较小,因此我想调整图片大小以使用我的图形视图大小调整它. 图形视图以mainwindow形式设置为" Qgraphicsscene场景"中的场景;" 我尝试了世界上一切可
70 2023-09-04
编程技术问答社区
Qt 无法将 QGraphicsView 信号的子类(非继承)连接到 SLOT
我定义了qgraphicsView的类MyGraphicsView的类.比,我在myGraphicsView中添加了信号测试().在我的MainWindow课程中,我有myGraphicsView* myview,我像: connect(myview,signal(test()),this,插槽(zoom())); 但是我得到了: QObject::connect: No such signal QGraphicsView::test() in ..\Proto_version_2\mainwindow.cpp:73 解决方案 为了在类中使用插槽和信号,必须从qobject或qobject派生的类派生,并且您的类必须包括q_object acra class MyClass : public QGraphicsView { Q_OBJECT // Without this macro, signals and slots will not w
10 2023-09-03
编程技术问答社区
在QGraphicsScene选择改变后切换QPen用于选定的项目
如何为所选GraphicsView项目切换QPEN颜色?理想情况下,我想在GraphicsView或Graphics Scene对象中处理此颜色更改,而不是在主要Windows选择事件中直接处理它. 任何帮助将不胜感激.当前,当选择对象时,它将转动笔颜色白色.我不确定如何将其向后避免避免在所有对象中循环. 有没有一种方法可以在MyGraphicsView类中添加一个函数本身,该函数可以处理图表中任何和所有选定项目的笔的颜色更改? 更新:更详细的信息 这是我要解决的选择问题的列表: 当用户单击并制作选择矩形时,它应该取消选择所有项目,并将其还原为默认的笔颜色.新选择的物品应具有白笔颜色.如果用户持有控制,则应添加新选择的项目.如果已经选择了项目并且矩形在它们上面交叉,则仍应将其选择. 如果用户在光标下未出现任何项目的负区域单击,则应清除当前选择. 如果用户单击一个项目,则应选择它并使笔颜色为白色. 如果用户持有控制,则应始终添加到选择中. 代码 i
18 2023-08-25
编程技术问答社区
QGraphicsView: 禁用自动滚动
我想拥有一个永远不会自动滚动的QgraphicsView. 类似:基本上,我的问题与 http://developer.qt.nokia .com/forums/viewThread/2220 ,但是该线程没有收到答案. 我到目前为止尝试过的是: 在showevent()和resizeevent()中,我做ui-> graphicsView-> fitinview(...),只要项目不超过屏幕矩形 我也尝试过操纵视图变换,但是除了扩展系数外,它永远不会改变,所以这是毫无结果的,太 放入滚动条的外观无济于事, 另请参阅 http://doc.qt.io/qt-4.8/qgraphicsview. html . 解决方案 我找到了一个解决方案(请随时发布您的选择:)),我仍然认为,当我在Google上挣扎和文档约15个小时时,我认为这个答案可能会有所帮助. 关键不仅要调用fitinview(),还要调用setScenerect().这是为我做的(
8 2023-08-23
编程技术问答社区
QGraphicsScene在QGraphicsView中的缩放比例很奇怪
我正在用QGraphicsView和QGraphicsScene弄乱来创建一个TIC TAC TOE克隆.我在场景中添加了一些QGraphicsLineItem s,并覆盖包含视图的小部件的resizeEvent方法,以便在调整窗口时,视图及其内容会适当地缩放.这可以正常工作,除了我第一次运行程序: 一旦我用任何数量调整窗口大小,场景就会正确缩放: 这是代码: main.cpp: #include #include "TestApp.h" int main(int argv, char **args) { QApplication app(argv, args); TestApp window; window.show(); return app.exec(); } testapp.h: #ifndef TEST_APP_H #define TEST_APP_H #include
14 2023-08-20
编程技术问答社区
QGraphicsView 滚动和图像缩放/裁剪
我想在我的qgraphicsview中拥有一个背景图像,该图像总是缩放(如有必要)(并在必要时裁剪),而没有滚动条,而无需使用键盘和鼠标滚动.下面的示例是我在视口上进行缩放和裁剪图像的作品,但是我正在使用从以太中抽出的裁剪的随机值.我想要一个逻辑解决方案? MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); scene = new QGraphicsScene(this); ui->graphicsView->resize(800, 427); // MainWindow is 800x480, GraphicsView is 800x427. I want an image that // is the size of the graphicsView.
92 2023-08-20
编程技术问答社区
QGraphicsView/QGraphicsScene: 如何在旋转过程中固定项目的 X 或 Y 坐标?
我在qgraphicsscene中有大约150个qgraphicsLineItems,我想"旋转"它们,但旋转不影响其x坐标.换句话说,它们会根据给定的旋转角垂直移动,但实际上不会旋转或水平移动. 我想这样做的原因是,相邻的QGraphicsScene/视图中还有其他几个正常旋转的项目,我希望此新场景/视图中的项目与正常旋转的显示高度匹配项目项目. 我会感谢一些建议或反馈.谢谢! 编辑:在这里,我有一个对话框,我将两个正方形绘制到场景1上,然后在场景2上绘制两行.当我拖动滑块时,我希望能够得到上面指定的行为,但是所发生的一切是正方形在旋转(如应该),而线条无济于事(它们应该用正方形上下移动).请注意,没有任何编译错误. 这是对话框构造函数: Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); // These points wi
16 2023-08-12
编程技术问答社区
如何在 Qt C++ 中围绕不同的锚点正确旋转 QGraphicsItem
我正在处理具有两个锚点的自定义Qgraphictem,我希望能够在用户与它们互动时旋转这些锚点.我已经实现了mousePressEvent和mouseMoveEvent来检测用户单击哪个锚点,设置旋转锚点并计算旋转角度. 这是我的代码的简化版本: myview.h static constexpr float ANCHOR_RADIUS = 10; class MyView : public QGraphicsItem { public: MyView(float xPos, float yPos, float width, float height, QGraphicsItem *parent = nullptr) : _width(width), _height(height), _viewState(VIEW) { setPos(xPos, yPos); setFlag(ItemIsMovable);
14 2023-08-12
编程技术问答社区
使 QGraphicsVideoItem 填充 QWidget
我的目标是创建一个简单的视频播放器QWidget,该播放器允许一些覆盖的图形(想想字幕或类似). 我从幼稚的方法开始,该方法是在顶部(我的覆盖层)上使用QVideoWidget> QVideoWidget.不幸的是,这是行不通的,因为 QT 不允许具有透明背景的小部件在视频之上呈现.背景显示为黑色而不是实际视频. 下一个想法是使用QGraphicsScene等.这应该允许这种合成,因此我创建了一个像这样的简单设置: // The widget we will use as viewport auto viewport= new QWidget(); //Set an easily recognizable bg color for debugging palette.setColor(QPalette::Window, Qt::green); viewport->setPalette(palette); viewport->setAutoFillBackground(t
12 2023-08-08
编程技术问答社区