crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V  < 1 2 3 4 >  
Ответить в данную темуНачать новую тему
> Работа с QTabWidget, взаимодействие между классами.
RazrFalcon
  опции профиля:
сообщение 11.4.2011, 14:04
Сообщение #11


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Блин!
Оно и до этого работало. Программа падала именно в load_and_show(), а не при определении класса.
Осталось понять в чем проблема.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 11.4.2011, 14:09
Сообщение #12


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


вообще что то несвязное, код в студию. (весь)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.4.2011, 14:20
Сообщение #13


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Вот в чем проблема:
settingTab::settingTab(QWidget *parent) : QWidget(parent)
{
  settings = new QSettings(QSettings::IniFormat, QSettings::UserScope,
                           "wallpapers-changer", "wallchanger");

  addFolderButton = new QPushButton("Add folder",this);
  connect(addFolderButton, SIGNAL(clicked()), this, SLOT(on_addFolderButton_clicked()));
}

void settingTab::on_addFolderButton_clicked()
{
  QString selectedDir = QFileDialog::getExistingDirectory(this,
                                                          "Open Image(s)",
                                                          "/media/data",
                                                          QFileDialog::ShowDirsOnly);
  folderListWidget->addItem(selectedDir);
  dirList.append(selectedDir);

  if (!dirList.isEmpty())
    settings->setValue("settings/dirList",dirList);

  if (!settings->value("settings/dirList").toStringList().isEmpty()) {
    m_pListTab->load_and_show();
  }
}

не создается файл конфигов, settings. А если закомментить m_pListTab->load_and_show(); - то создается. А load_and_show() как раз его и читает. И получается, что оно читает файл который не создался, и программа убивается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 11.4.2011, 14:27
Сообщение #14


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


программа убивается на строке:
m_pListTab->load_and_show();
?

если это так, то покажи пожалуйста код где инициализируется объект m_pListTab.

Сообщение отредактировал wiz29 - 11.4.2011, 14:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.4.2011, 14:32
Сообщение #15


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Нет. При попытке прочесть QSettings в load_and_show();

Инициализация:
class settingTab : public QWidget
{
    Q_OBJECT

public:
    QSettings *settings;
    ...

private slots:
    void on_addFolderButton_clicked();

private:
    ListTab* m_pListTab;
};


Сообщение отредактировал RazrFalcon - 11.4.2011, 14:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 11.4.2011, 14:42
Сообщение #16


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


возможно кинуть код проекта архивом, или архивом целиком файлы с данными классами, просто отрывки не отражают всей картины.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.4.2011, 14:47
Сообщение #17


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Еще сырой.
Прикрепленные файлы
Прикрепленный файл  wall_new.zip ( 10.17 килобайт ) Кол-во скачиваний: 77
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 11.4.2011, 15:02
Сообщение #18


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Проблема банальна, у тебя не инициализирована m_pListTab, т.е. адрес этого объекта = мусор. Инициализируй его в конструкторе класса settingTab

просто разыменование "мусора" ведет к непредсказуемому результату. это и вызывало падения...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.4.2011, 15:04
Сообщение #19


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Так что ли?
m_pListTab = new ListTab;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 11.4.2011, 15:10
Сообщение #20


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


settingTab::settingTab(QWidget *parent) : QWidget(parent)
{
  m_pListTab = new ListTab(this);
  settings = new QSettings(QSettings::IniFormat, QSettings::UserScope,
                           "wallpapers-changer", "wallchanger");

  picFolders = new QLabel("Pictures folders:",this);
  addFolderButton = new QPushButton("Add folder",this);
  connect(addFolderButton, SIGNAL(clicked()), this, SLOT(on_addFolderButton_clicked()));
  folderListWidget = new QListWidget(this);
  QGridLayout *my = new QGridLayout;

  //QStringList dirList;
  //dirList = new QStringList;
  dirList = settings->value("settings/dirList").toStringList();
  //dirList<<"/media/data/Additional/Pictures"<<"/media/data/Additional/Images";

  my->addWidget(picFolders,0,0,1,3);
  my->addWidget(folderListWidget,1,0,1,3);
  my->addWidget(addFolderButton,2,0);
  setLayout(my);

  for (int i=0; i<dirList.count(); ++i) {
    folderListWidget->addItem(dirList.at(i));
  }

  if (!dirList.isEmpty())
    settings->setValue("settings/dirList",dirList);
}


Совет: по максимому используй возможности QtDesigner для создания диалогов, будет менее мусорный и читабельный код. Просто не имеет смысла "ковыряться" с размещением и компоновкой элементов, там где это реально не нужно. Это тебе сэкономит кучу времени на более полезные задачи.

Сообщение отредактировал wiz29 - 11.4.2011, 15:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V  < 1 2 3 4 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.2.2023, 21:09