【发布时间】:2021-12-09 23:19:46
【问题描述】:
我有多个 QGraphicsScene 对象,应在不同时间将它们绘制成单个 QGraphicsView。
一旦我通过setScene 成员函数将一个场景分配给一个视图,是否可以用另一个更改查看的场景?
如果我不想显示任何场景或者每次都必须传递一个有效的指针,通过setScene 分配nullptr 是否安全?
示例
class MyViewer : public QObject{
Q_OBJECT
QGraphicsView sc;
QGraphicsScene scenes[10];
int i;
public:
//....
QGraphicsView *getView() { return ≻}
//called by a QTime event for example
void update(){
if(i >= 10)
i = 0;
sc.setScene(&(scene[i]));
i++;
}
};
int main(int n, const char **a){
QApplication app(n, a);
MyViewer vw;
/*
* Do some stuffs, initialize and connect a QTimer
*/
vw.getView()->show();
app.exec();
}
【问题讨论】:
-
根据 QGraphicsView 文档页面中的措辞,我相信您的所有问题的答案都是肯定的,但只有您尝试后才能确定。
-
我认为最好用一个例子来问你的问题。您可以拥有一个具有一个 QGraphicsView 对象和一个 QGraphicsScene 对象的视图类,并将该场景分配给 QGraphicsView 对象。然后你可以从这个类创建多个对象。并为每个此类添加不同的项目。
-
@JeremyFriesner 我可以尝试一下,但如果它是一个未记录的功能,那么这并不能保证它可以在其他平台或更高版本的 Qt 库上工作。所以我的问题是,无论实际的 Qt 库实现如何,这在 Qt 中是否合法。
-
@Parisa.H.R 那么你是说为每个场景分配不同的视图吗?这听起来有点棘手,但实际上我不想每次都从我的主窗口中删除和添加一个小部件。
-
@desio ,我不知道你在做什么。你应该用一个例子来解释你的问题。
标签: c++ qt qgraphicsview qgraphicsscene