我遇到了非常奇怪的行为。在我的类中,我将QFileSystemModel声明为静态变量,并且此变量在ctor中初始化,并且它可以工作,但是一旦我尝试更新其状态(通过此类中的某些方法),这似乎没有任何影响。但是,只要我将此变量更改为非静态,一切都可以正常工作。我错过的静态变量是什么?
class X:public QDialog
{
Q_OBJECT
static QFileSystemModel* model_;
public:
void update();
};
//cpp file
X::QFileSystemModel* model_
X::X()
{
model_ = new QFileSystemModel(this);
}
void X::update()
{
model_->setNameFilters("*.h");//this will have absolutely no effect unless I make
//model_ non static
}
答案 0 :(得分:2)
您需要这样做,以防止多次初始化model_
:
//cpp file
X::QFileSystemModel* model_ = 0; // Not strictly necessary, but good for clarity
X::X()
{
if (model_ == 0) model_ = new QFileSystemModel(this);
}
答案 1 :(得分:1)
由于您为类model_
的每个新实例创建了一个新的X
(每次运行构造函数时),您所描述的问题似乎都归结为;覆盖。
在X::update
中设置某个状态后,可能会被另一个新创建的实例覆盖。
这是我能给你的最佳答案,没有关于此事的任何更多信息。
struct Obj {
Obj () {
std::cerr << "model_: " << *model_ << std::endl;
++(*model_);
}
static int * model_;
};
int * Obj::model_ = new int (); // initialize the static member
int
main (int argc, char *argv[])
{
Obj a, b, c;
}
我猜你的代码段中的这一部分包含一个拼写错误,因为构造函数不能有返回类型。
X::QFileSystemModel* model_
X::X()
{
model_ = new QFileSystemModel(this);
}