Название: [решено]Сигнал от класса наследуемого отQSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 00:25 И так..
1)есть таблица QTableView tableViewMain. 2)есть класс TableAmdinWidget(назовем для примера так =)) который управляет различными таблицами в приложении, в том числе и этой. 3)в объявлении этого класса подключается класс AmdinWidgetSqlModel наследуемый от QSqlQueryModel. В котором переопределены методы Код: bool setData(const QModelIndex &index,const QVariant &value, int role); 4)И в общем суть проблемы, при редактировании tableViewMain должны обновляться автоматически данные других таблиц. вызываю в конструкторе TableAmdinWidget Код: QObject::connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex)),this,SLOT(initUpdate())); не работает Цитировать QObject::connect' : none of the 3 overloads could convert all the argument types Пояснения. в TableAmdinWidget есть метод который получает указатель на таблицу. так же там есть слот initViewRez(QTableView*) в который мы кладем этот указатель - забирает данные из базы и выводит на таблицу. model - это указатель на класс AmdinWidgetSqlModel. вообщем, как то всё.. как решить эту проблему. И как вообще можно, если можно, что бы при обновлении модели model , автоматом обновлялись другие. Заранее спасибо. Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: LisandreL от Апрель 11, 2012, 06:29 Может с типами что-то.
Покажите объявление model и initUpdate() Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 07:33 TableAmdinWidget
.h Код: private slots: Код: void TableAmdinWidget::initUpdate() AmdinWidgetSqlModel .h Код: class AmdinWidgetSqlModel : public QSqlQueryModel Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: mutineer от Апрель 11, 2012, 10:17 тупой вопрос: TableAmdinWidget наследуется от чего?
Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 10:27 Цитировать тупой вопрос: TableAmdinWidget наследуется от чего? Ни от чего, он как отдельный класс, чисто для управления. Задать размеры столбцов,сделать запрос в бд, установить модели к таблицам. Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: mutineer от Апрель 11, 2012, 10:30 Цитировать тупой вопрос: TableAmdinWidget наследуется от чего? Ни от чего, он как отдельный класс, чисто для управления. Задать размеры столбцов,сделать запрос в бд, установить модели к таблицам. чтобы у класса были слоты, надо этот класс унаследовать от QOblect. в доке написано... да и по сигнатуре connect тоже видно, что принимает функция указатели на наследники от QObject Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 10:48 Программа неожиданно завершилась. завершился с кодом -1073741819 Как я понимаю падает когда, вызывается connect .h Код: class TableAmdinWidget : public QObject Код: TableAmdinWidget::TableAmdinWidget(QObject *parent) Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: mutineer от Апрель 11, 2012, 10:49 О сколько нам открытий чудных готовит документации мир...
макрос Q_OBJECT кто будет писать? Дедушка Ленин? и qmake сделать не забудь после этого Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 11:03 О сколько нам открытий чудных готовит документации мир... макрос Q_OBJECT кто будет писать? Дедушка Ленин? и qmake сделать не забудь после этого Ой да.. но смысл не изменился. Все равно падаем... Приложение под винду(Qt Creator) Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: mutineer от Апрель 11, 2012, 11:04 Показывай код
Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: GreatSnake от Апрель 11, 2012, 11:07 Что-то вообще странное делается.
Создаётся класс и называется ...Widget. Только вот к виджету сей класс похоже никакого отношения не имеет. ТС в курсе что такое "виджет" и чем QWidget отличается от QObject? Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 11:08 Код: class TableAmdinWidget : public QObject Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об ред Отправлено: mutineer от Апрель 11, 2012, 11:09 ок. В этом коде ошибок нет. давай дальше
З.Ы. так и будешь по паре строк в каждом сообщении выкладывать и заставлять форумчан собирать паззл? Пардон, есть ошибка, даже две: 1) нет #include <QObject> 2) не закрыта фигурная скобка в конце описания класаа Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: GreatSnake от Апрель 11, 2012, 11:10 Код: class TableAmdinWidget : public QObject Граждане!!! Да он над нами издевается!!! :) Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 11:35 .h
Код: #include <QtSql> Код: #include "tableamdinwidget.h" тык нашел у себя ошибку..приложение запускается. все хорошо креатор связал сигнал модели и слот. Но в апдейт мы так и не попадаем.. не вызывается. .h AmdinWidgetSqlModel Код: #include <QSqlQueryModel> Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: mutineer от Апрель 11, 2012, 11:37 а в setData ты этот сигнал испускаешь? опять какие-то огрызки кода дал...
Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 11:46 мм.. в setData ?
про куски кода - думал не важно... Код: bool AmdinWidgetSqlModel::setData(const QModelIndex &index, const QVariant &value, int role) void AmdinWidgetSqlModel::refresh() -просто селект в базу данных Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: mutineer от Апрель 11, 2012, 11:49 выбрасывай сигнал явно
Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 11:52 выбрасывай сигнал явно Поясни пожалуйстаНазвание: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: mutineer от Апрель 11, 2012, 11:54 В setData делай emit dataChanged(...) Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: GreatSnake от Апрель 11, 2012, 12:00 void AmdinWidgetSqlModel::refresh() -просто селект в базу данных Хм, а из-за этого не получишь рекурсию?Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 12:34 void AmdinWidgetSqlModel::refresh() -просто селект в базу данных Хм, а из-за этого не получишь рекурсию?Не, не циклится. Всё нормально. сигнал вызываем тут в setData, после обновления модели. Код: ......... Спасибо огромное. Мда косячки есть у меня) ну что ж буду исправляться) Да мм.. можно еще вопрос ну около этой же темы. Надо что бы последняя колонка в таблице была определенного цвета. Как я понял надо переопределить QVariant data .h AmdinWidgetSqlModel Код: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole ) const; .cpp Код: QVariant FisheryWidgetSqlModel::data(const QModelIndex &index, int role) const Как же их вывести. Уже туплю... Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: mutineer от Апрель 11, 2012, 12:35 твой метод дата возвращает только цвет, данные не возвращает. Откуда ж им взяться на экране?
Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: GreatSnake от Апрель 11, 2012, 13:01 Естественно цвет ставит, но данные то не выводит. Вызывай для остальных случаев data() базового класса.Как же их вывести. Уже туплю... Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 13:15 Код: QVariant AmdinWidgetSqlModel::data(const QModelIndex &index, int role) const Смысл в том что там должны отображаться данные и измениться фон в этой колонке.. Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: GreatSnake от Апрель 11, 2012, 13:26 Чего-то подтормаживаешь без кофе то)
Код
Название: Re: Сигнал от класса наследуемого от QSqlQueryModel об редактировании модели. Отправлено: Kirill_m от Апрель 11, 2012, 13:35 Чего-то подтормаживаешь без кофе то) Код
Огромное спасибо) Ну наверно всё можно закрывать. |