gpt4 book ai didi

c++ - Qt QGraphicsScene 添加和删除线条

转载 作者:行者123 更新时间:2023-11-30 03:39:35 29 4
gpt4 key购买 nike

我是 Qt 的(非常)新手,我正在尝试制作一个简单的绘图(不涉及外部库和合作伙伴),它还有一个框、轴和网格线,我希望能够切换它们。

我将 QGraphicsScene 定义为 scene,我可以在其中使用 scene->addLine(...),但我没有知道如何根据 QCheckBox 删除这些行。这是(简而言之)我在函数 plotAxes() 中设置的,它将与 connect() 一起使用:

    QGraphicsLineItem *xAxis {new QGraphicsScene::addLine(xMin, 0, xMax, 0, *dashedLine)};
if (boxToggle->isChecked())
{
scene->addItem(xAxis);
//scene->addLine(yCenter, yMin, yCenter, yMax, *dashedLine);
scene->update();
}
else
{
scene->removeItem(xAxis);
scene->update();
}

代码只显示第一个轴,如果它适用,我可以扩展到其他所有内容,但它不起作用。对于 xAxis,我尝试了 QGraphicsItemQGraphicsScene 组合,但这不是我想要继续的方式。我不知道如何将线(轴)添加为变量或指针,然后使用它在场景中添加/删除。谁能告诉我怎么做?


[编辑]抱歉,忘了说我希望能够在不影响已经绘制的内容的情况下切换它们。

最佳答案

如果你有固定数量的行,你可以将它们存储为成员变量,问题就变得微不足道了。但我假设行数可能会有所不同。我还假设您希望显示/隐藏的每一行都有一个单独的复选框。你想做的是使用 toggled您的复选框信号隐藏/显示您的台词。您可以使用 QSignalMapper 来执行此操作,但我建议使用 lambda 表达式。

我在下面举了一个例子,你可以复制粘贴并运行。现在在这个例子中我使用了一个 lambda 表达式,它需要 c++11。如果您使用的是 Qt 5.7 (或更新版本供将来引用),我认为它是自动启用的。但如果您使用的是旧版本,则必须在 .pro 文件中添加 CONFIG += c++11

#include <QApplication>
#include <QGraphicsView>
#include <QLayout>
#include <QCheckBox>
#include <QGraphicsLineItem>

class Widget : public QWidget
{
Q_OBJECT
public:
Widget()
{
resize(600, 400);
setLayout(new QVBoxLayout);
view = new QGraphicsView;
scene = new QGraphicsScene(this);
view->setScene(scene);
layout()->addWidget(view);

for(int i = 0; i < 5; i++)
{
QGraphicsLineItem *line = scene->addLine(0, i * 20, width(), i * 20, Qt::DashLine);
lines.append(line);

QCheckBox *checkbox = new QCheckBox(QString("Show line %1").arg(i+1));
connect(checkbox, &QCheckBox::toggled, [=](bool toggled){line->setVisible(toggled);});
layout()->addWidget(checkbox);
checkbox->setChecked(true);
}
}

private:
QGraphicsView *view;
QGraphicsScene *scene;
QVector<QGraphicsLineItem*> lines;
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();

return a.exec();
}

#include "main.moc"

关于c++ - Qt QGraphicsScene 添加和删除线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38738603/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com