【发布时间】:2014-09-16 07:01:52
【问题描述】:
您能解释一种存储具有全局访问权限的程序数据的方法吗?
我找到了这些关键字:
- 使用静态类存储数据
- 按值传递 QList
- 通过引用传递 Qlist
- 使用“朋友”关键字
但我找不到任何存储全局 QList 的真实示例,正如他们所说,使用全局变量是一个糟糕的设计。还有人提到,在 QList 上使用指针是个坏主意,因为隐式共享 (?)。
那么我应该在哪里存储我的 Qlist 以便从另一个 .cpp 中的不同类访问它?所以我有:
主窗口.h
QList <SceneCard> sceneList;
QString mTitle;
public slots:
QString setValue()
{
return mTitle;
}
主窗口.cpp
MainWindow::AddScene()
{
sceneCard = new SceneCard(sNumber);
sceneList.append(sceneCard);
mTitle = "Nejat is right!"
}
void MainWindow::showSceneCard()
{
SceneDialog D;
connect(D,SIGNAL(getValue()),this,SLOT(setValue()));
D.exec();
}
scenedialog.h
#ifndef SCENEDIALOG_H
#define SCENEDIALOG_H
#include <QDialog>
#include <QList>
namespace Ui {
class SceneDialog;
}
class SceneDialog : public QDialog
{
Q_OBJECT
public:
SceneDialog(QWidget *parent = 0);
~SceneDialog();
signals:
QString getValue();
private:
Ui::SceneDialog *ui;
QString myText;
};
scenedialog.cpp
#include "scenedialog.h"
#include "ui_scenedialog.h"
#include <QDebug>
SceneDialog::SceneDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::SceneDialog)
{
ui->setupUi(this);
myText = getValue();
qDebug() << myText; // myText is empty!!
}
【问题讨论】:
-
你应该熟悉单例conecpt。创建一个包含 QList 成员的单例类。有关此模式的更多信息,请参阅 en.wikipedia.org/wiki/Singleton_pattern。
-
“商店”是什么意思?有一个返回列表的成员函数会达成交易吗?用列表发送信号也不行?
-
'Store' 意味着我需要从不同的 .cpp 文件中读取/写入此 QList。列表应该可以全局访问。
-
好吧,也许我应该重新表述:我在主窗口中有可视节点,并调用对话框来编辑它们的属性。然后我应该将所有节点的属性传递给另一个 QWidgetTab
-
因此将所需的数据传递给您的对话框,当对话框通过接受它关闭时,从对话框中获取新数据。我不明白你为什么需要一个全局的
QList。