Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Segmentation fault при наследовании 
:(
    Опции темы
shifteee
Дата 10.5.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.5.2010

Репутация: нет
Всего: нет



Добрый день!
Осваиваю QT4.

есть класс-потомок для класса Ui_MainWindow()

Цитата

class TmySlot : public Ui_MainWindow
{
public:
    QVector<QString> result;
    bool connectionStatus;

    TmySlot();
    void Set_comboBox_values();

};



Ui_MainWindow() думаю нет смысла приводить.
Ошибка возникает при попытке обратиться к методу родителя (выделено жирным)

Цитата

void TmySlot::Set_comboBox_values()
{
    QStringList val;
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    db.setHostName("localhost");
    db.setUserName("root");
    db.setPassword("samara21");
    db.setDatabaseName("monster");

    if( db.open() ) {
        QSqlQuery query("SELECT `Name` FROM `Monsters` ORDER BY `Name`");

        if( query.numRowsAffected() > 0 ) {
           while( query.next() ) {
               val.append(query.value(0).toString() );
           }
           Ui_MainWindow::comboBox->addItem( "kjlhlkkj" );
        }
        else {

        }
    }
   //else
}



Ui_MainWindow::comboBox - стандартный класс QComboBox, нарисованный в форме. Подскажите что тут не так с наследованием? И куда копать. Своими силами не осилил smile
PM MAIL   Вверх
djamshud
Дата 10.5.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 5
Всего: 39



Телепаты считают, что setupUi - или как он там называется - не вызван.

//На каждый чих базу открывать/закрывать будем?


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
shifteee
Дата 10.5.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.5.2010

Репутация: нет
Всего: нет



Цитата(djamshud @ 10.5.2010,  12:27)
Телепаты считают, что setupUi - или как он там называется - не вызван.

//На каждый чих базу открывать/закрывать будем?

Не совсем понял к чему фраза телепаты? Вам что-то не хватает в моем сообщении?

Кусок из main.cpp
Цитата

#include "acts.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    TmySlot mySlot;
    mySlot.Set_comboBox_values();

}



Программа такова, что по нажатию на кнопку происходит запись в базу и чтение новых данных. И один раз при открытии чтение из нее.

Это сообщение отредактировал(а) shifteee - 10.5.2010, 14:10
PM MAIL   Вверх
djamshud
Дата 10.5.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 5
Всего: 39



>Не совсем понял к чему фраза телепаты?

К тому, что конструктор TmySlot как не был показан, так и остался. А теперь вообще неразбериху устроили, и как я понял кашу из наследований устроили по незнанию Qt и сами в ней запутались по незнанию с++. Ошибка возникает от того, что в пределах объекта TmySlot ui-шные указатели не инициализированы.

В общих чертах:

Код

class TmySlot{
//...
void Set_comboBox_values(QComboBox *box);//set data in the 'box'
/*или, в случае если в TmySlot нужно обращаться и к другим элементам интерфейса, более кошерно:
protected:
MainWindow *mw;
public:
TmySlot(MainWindow*);//store mw
void Set_...();//use this->mw->ui.comboBox
*/
};

class MainWindow:public QMainWindow{
/*4kosher:
friend class TmySlot;*/
protected:
UI::MainWindow ui;
TmySlot mySlot;
public:
MainWindow():QMainWindow()
/*4kosher:
,mySlot(this)*/{
this->ui.setupUi(this);
this->mySlot.Set_...(this->ui.ComboBox);
/*4kosher:
this->mySlot.Set_...();*/
}
};


>Программа такова, что по нажатию на кнопку происходит запись в базу и чтение новых данных. И один раз при открытии чтение из нее.

В таких случаях при старте (или первом действии или как-то еще) соединение с базой устанавливается, при завершении программы (или...) - закрывается.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
djamshud
Дата 10.5.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 5
Всего: 39



Кстати, каков смысл выносить в отдельный объект TmySlot? Почему прямо внутри MainWindow не хранить вектор и не читать базу?


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
shifteee
Дата 10.5.2010, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.5.2010

Репутация: нет
Всего: нет



Цитата(djamshud @ 10.5.2010,  14:41)
>Не совсем понял к чему фраза телепаты?

К тому, что конструктор TmySlot как не был показан, так и остался. А теперь вообще неразбериху устроили, и как я понял кашу из наследований устроили по незнанию Qt и сами в ней запутались по незнанию с++. 

Вы чертовски правы. Изучение с++ идет параллельно изучению Qt.

Спасибо за совет smile

И все же. Думаю что коннект к базе держать не имеет смысла. Особенно если сервер будет на моем компьютере, а программа у нескольких пользователей)

Цитата

Кстати, каков смысл выносить в отдельный объект TmySlot? Почему прямо внутри MainWindow не хранить вектор и не читать базу? 

Просто не хотел лезть в код, сгенерированный Qt. 3 раза терял написанное из-за того, что Qt предлагал мне перезагрузить окно т.к. откуда-то из вне оно изменено smile

Это сообщение отредактировал(а) shifteee - 10.5.2010, 15:07
PM MAIL   Вверх
djamshud
Дата 10.5.2010, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 5
Всего: 39



>Просто не хотел лезть в код, сгенерированный Qt.

Эмм... Вы как-то совсем не так используете Qt. В Ui::MainWindow лезть не стоит, а вот свой можно редактировать сколько влезет.

Не удивляйтесь потом, если клиенты закликают ваш сервер:).

Пожалуйста.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0949 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.