![]() |
|
|
![]()
|
|
| dmitrio |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Создаю собственный информационный класс который будет отвечать за работу с базами данных.
Наследую от QWidget (хотя не знаю правильно или нет, потому что класс несет только информацию): dbclass.h
dbclass.cpp
Если из методов убрать QSqlDatabase database = QSqlDatabase::database("dbconnection"); то программа сегфолтится. Почему так происходит?? Я немного догадываюсь, что это все из-за того что я до сих пор не читал Страуструпа. Но вот только что его скачал и начинаю читать. Может кто-нибудь опередит меня и подскажет |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Ты не проинициализировал в конструкторе поля database, query, text, поэтому и не можешь использовать их в методах.
Добавь так же деструктор. Если не нужен функционал Widget, но нужны сигналы/слоты - наследуйся от QObject. Если не нужны и сигналы/слоты - не наследуйся ни от чего. |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
И в итоге (если я правильно понял) должно быть как-то так
dbclass.h
dbclass.cpp
ф-ция readDBData() несколько странная - в цикле вычитываются id-шники, но каждый раз перезаписываются в одну и ту же переменную. В итоге ты вернёшь последний id... Это сообщение отредактировал(а) borisbn - 15.9.2011, 08:42 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| dmitrio |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Спасибо
На счет странности смешно ))))) Это я так просто чтобы прочитать что-нить в БД. Там пока только одна запись где id=1 Если на экране увидел 1 значит все работает, эт я так проверял )))) Вопрос: Почему так:
а не так:
??? Я просто делал всегда как во втором варианте в include gconst.h содержится три глобальных константы 1) Номер версии программы 2) Путь к БД 3) Директория к БД Пока подумал что именно они в качестве глобальных ничего страшного не сделают, хотя слышал что глобальность зло Это сообщение отредактировал(а) dmitrio - 15.9.2011, 09:43 |
||||
|
|||||
| borisbn |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
это ж просто пробелы... не люблю, когда символы сливаются. иногда трудно найти ошибку. ещё лучше так
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||
|
|||||||||
| dmitrio |
|
||||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
При изменении на все вышесказанное компилятор стал ругаться:
10-я строка это макрос:
P.S добавляю в объявление класса dbclass наследование от QWidget компилятор ругаться перестает Ну наверное напоследок еще пару своих нужных вопросов: 1-ый вопрос:
Какая разница между этими двумя строками? Я себе купил книгу Qt4 программирование GUI на C++ Жасмин Бланшет Марк Саммерфилд Многое делал по нему, и там как раз описывается второй вариант. Конечно вопрос наверное более по C++, ну я думаю к концу этой недели прочитаю Страуструпа 2-ой вопрос: Совсем запутался в объявлении переменных в классе Почему какие-то инициализируются как указатели
Это просто пример, опять же все делалось по книге Бланшета Тут надо так:
3-ий вопрос Переменные в методах не требуют объявлений в классе?
Извиняюсь если мои вопросы кажутся больно глупыми и простыми. Это сообщение отредактировал(а) dmitrio - 15.9.2011, 11:53 |
||||||||||||||
|
|||||||||||||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Если не наследуешься от QObject или QWidget, строку Q_OBJECT нужно убрать, если наследуешься - она нужна.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
ага. забыл убрать. просто удали и всё. наследоваться от QWidget не нужно Второй вариант это объявление и инициализация переменной внутри функции. "Жить" этой переменной до конца функции. В других функциях эта переменная не будет доступна. Первый вариант - это инициализация (вернее, просто присвоение щначения) переменной-члена класса. Не инициализируются, а объявляются.... Совет: не начинай с Qt. Изучи сначала основы Си++: переменные, функции, указатели, ссылки, классы, конструкторы/деструкторы и т.п. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| dmitrio |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Всем спасибо за подсказки.
Да действительно перепутал слова инициализация и объявление, чет всегда их путаю Почему-то охота сразу с Qt разбираться, надеюсь что у меня все получиться Еще раз всем спасибо |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |