gpt4 book ai didi

linux - 用两个 QGraphicsSimpleTextItem-s 制作一个 QGraphicsItemGroup?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:07 24 4
gpt4 key购买 nike

假设我想在一些 QGraphicsScene 中显示一个简单的家谱树。那里的每个人都有确切的名字和姓氏(没有显示其他任何内容)。

我想为那里的每个人建立一个 QGraphicsItemGroup由两个组成QGraphicsSimpleTextItem -s 垂直对齐并居中。一个用于人的名字,一个用于他们的姓氏。每个都有自己的字体和颜色。我不想使用沉重的 QGraphicsTextItem因为它太重了(一个只有名字和姓氏的人名不值得一个完整的 QTextDocument )。

所以我在想

 struct Person {
QGraphicsItemGroup _group;
QGraphicsLinearLayout _lay;
QGraphicsSimpleTextItem _firstname;
QGraphicsSimpleTextItem _lastname;
public:
Person(QGraphicsScene*scene,
const std::string& first, const std::string& last)
: group(), _lay(Qt::Vertical),
_firstname(first.c_str()), _lastname(last.c_str()) {
_lay.addItem(&_firstname);
_lay.setSpacing(0, 5);
_lay.addItem(&_lastname);
_group.addToGroup(&_firstname);
_group.addToGroup(&_lastname);
scene->addItem(&_group);
};
};

但这不起作用,因为 _lay.addItem(&_firstname); 无法编译,因为 QGraphicsSimpleTextItem 不是 QGraphicsLayoutItem

有什么提示吗?还是我的整个方法都错了?

我是否应该定义一个同时继承自 QGraphicsSimpleTextItemQGraphicsLayoutItem 的类?

注意:实际代码(GPlv3 许可)在我的 basixmogithub 上的项目,文件 guiqt.cc , 提交 99fd6d7c1ff261 .它不是一个谱系项目,而是一个抽象的语法树编辑器,就像一个坚持不懈的解释者的东西。相关类是BxoCommentedObjrefShow;我显示的不是名字,而是像 _7rH2hUnmW63o78UGC 这样的 ID,而不是姓氏,我显示的是像 body of test1_ptrb_get 这样的简短评论。 basixmo项目本身是对 melt-monitor-2015 的暂定重写在 C++11 和 Qt5 中

最佳答案

看来你认为 QGraphicsLinearLayout 的目的不是它的真正目的:

来自 Official QT 5.7 documentation

The QGraphicsLinearLayout class provides a horizontal or vertical layout for managing widgets in Graphics View

它不应该在你的场景中布置普通的绘图项目,而是 QWidgets。不幸的是,有关它的文档和示例似乎不起作用。

如何实现垂直布局

幸运的是,QGraphicsItem 不难扩展,因此您可以在几行中实现您的文本对:

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsSimpleTextItem>
#include <QGraphicsItemGroup>

class QGraphicsPerson: public QGraphicsItemGroup
{
public:
QGraphicsPerson( const QString& firstStr,
const QString& secondStr,
QGraphicsItem *parent=nullptr)
{
first.setText(firstStr);
second.setText(secondStr);
addToGroup(&first);
addToGroup(&second);
second.setPos(first.pos().x(), first.pos().y()+first.boundingRect().height());
}

protected:
QGraphicsSimpleTextItem first, second;
};

int main(int n, char **args)
{
QApplication app(n, args);

QGraphicsScene scene;
QGraphicsView window(&scene);

QGraphicsPerson person( "Adrian", "Maire");
scene.addItem(&person);
person.setPos(30,30);

QGraphicsPerson person2( "Another", "Name");
scene.addItem(&person2);

window.show();
return app.exec();
}

注意:场景空间在两个方向上都无限延伸,因此空间管理非常简单(没有最小/最大尺寸、拉伸(stretch)等)

关于linux - 用两个 QGraphicsSimpleTextItem-s 制作一个 QGraphicsItemGroup?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40552360/

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