Привет, ребята .. Ну, с тех пор, как я начал программировать на Qt, у меня были проблемы с видимостью объектов, которые я определил ... До сих пор мне удавалось найти способы обойти эти вещи, нотеперь это становится раздражающим ..
Например, у меня есть этот класс, названный Canvas:
class Canvas : public QWidget//, public MainWindow
{
Q_OBJECT
public:
void refreshFoldersList(QString inputPath);
void browseFolders();
private:
QListWidget *foldersList;
};
#endif // CANVAS_H
Теперь, даже если folderList является закрытым, refreshFoldersList () должен иметь возможность его видеть, право ?Но в моем случае это не может ..!Сначала я инициализирую folderList в функции browseFolders (), а затем из функции browseFolders () вызываю функцию refreshFoldersList () ... Любой код в refreshFoldersList (), работающий с folderList, немедленно вызывает ошибку сегментации ... Я проверил значения указателядля folderList, когда область видимости находится в browseFolders () и refreshFoldersList () .. значения не совпадают .. это как будто я пытаюсь получить доступ к тому, чего не должен, или пытаюсь получить доступ кобъект, который еще не был инициализирован ..
Есть какие-либо подсказки по этому поводу?
Связанная проблема ... У меня есть другой класс MainWindow (унаследованный от QMainWindow) .. В этом классе у меня естьэкземпляр класса Canvas .. этот экземпляр называется canvas .. Я инициализирую canvas в конструкторе MainWindow и устанавливаю родительский объект canvas для экземпляра MainWindow, инициализируя его .. На основании этого я использовал следующий код для доступа к функции MainWindow изнутриХолст класс:
((MainWindow*)parent())->someFunctionDefinedInMainWindow();
До того, как выше сОда раньше работала ... но потом, как 2-3 дня назад, она внезапно перестала работать ... Теперь он оказался внутри функции MainWindow, которую я вызывал (а именно someFunctionDefinedInMainWindow ()), но оттуда, если я попытался получить доступлюбая переменная, определенная в MainWindow, я получил ошибку сегментации, опять же со значениями указателя, не совпадающими .. Я решил это путем определения переменной как:
void * papa;
.. внутри Canvas, а затем, когда яЯ установил инициализированный холст:
canvas->papa = this; //this being the MainWindow instance initializing canvas
Теперь я получил доступ к функциям MainWindow следующим образом:
((MainWindow*)papa)->someFunctionDefinedInMainWindow();
.., который работает!
Но опять же, я хотел бызнать природу этих проблем .. я что-то делаю не так или как?