【发布时间】:2010-07-05 13:08:48
【问题描述】:
嘿伙计们 .. 自从我开始使用 Qt 编程以来,我一直在我定义的对象的范围可见性方面遇到问题 .. 直到现在我已经设法找到解决这些问题的方法,但是现在越来越烦人了..
例如,我定义了一个名为 Canvas 的类:
class Canvas : public QWidget//, public MainWindow
{
Q_OBJECT
public:
void refreshFoldersList(QString inputPath);
void browseFolders();
private:
QListWidget *foldersList;
};
#endif // CANVAS_H
现在即使foldersList 是私有的,refreshFoldersList() 也应该能够“看到”它,对吧?但就我而言,它不能..!我首先在browseFolders()函数中初始化foldersList,然后在browseFolders()中,我调用refreshFoldersList()...... refreshFoldersList()中处理foldersList的任何代码都会立即引发分段错误......我已经检查了指针值当范围在browseFolders()和refreshFoldersList()中时,对于foldersList ..值不匹配..就像我正在尝试访问我不应该访问的东西,或者我正在尝试访问尚未初始化的对象..
这有什么线索吗?
一个相关的问题...我有另一个类 MainWindow(继承自 QMainWindow)..在这个类中我有一个 Canvas 类的实例..这个实例被命名为 canvas..我在 MainWindow 的构造函数中初始化画布,并设置初始化它的 MainWindow 实例的画布的父级.. 基于此,我使用以下代码从 Canvas 类中访问 MainWindow 函数:
((MainWindow*)parent())->someFunctionDefinedInMainWindow();
之前,上面的代码过去可以工作..但是就像 2-3 天前它突然停止工作..现在它让我进入了我正在调用的 MainWindow 函数(即 someFunctionDefinedInMainWindow() ),但是从那里,如果我尝试访问 MainWindow 中定义的任何变量,我会遇到分段错误,指针值不匹配。我解决此问题的方法是将变量定义为:
void * papa;
..在Canvas里面,然后我初始化canvas的时候,我设置:
canvas->papa = this; //this being the MainWindow instance initializing canvas
现在我像这样访问 MainWindow 的函数:
((MainWindow*)papa)->someFunctionDefinedInMainWindow();
.. 有效!
但是,我想知道这些问题的本质..我做错了什么还是什么?
【问题讨论】:
-
永远不要责怪编译器/环境/框架。没有冒犯,但是...更有可能的是:您犯了错误还是他们犯了?
-
发布方法实现让你更轻松。
-
我总是遇到这样的情况,当我说语言中的一个错误时,我的同事会从我的应用程序中更改一段代码 - 让它工作并会说,“看看错误在哪里" :)