crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Реализация многопользовательского приложения
BRE
  опции профиля:
сообщение 15.3.2009, 21:16
Сообщение #11


Профессионал
*****

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

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




Репутация:   44  


Цитата(LE0N @ 15.3.2009, 20:21) *
А от чего наследовать UserModel в случае с работой с базами данных? (QT)

Я использую в качестве базы QAbstractTableModel, от него делаю свой класс SqlTableModel, а от него идут все модели.
С QSqlTableModel у меня как-то не сложилось, наверное из-за его универсальности, не нравится он мне. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 15.3.2009, 21:29
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

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




Репутация:   0  


Цитата
Я использую в качестве базы QAbstractTableModel, от него делаю свой класс SqlTableModel, а от него идут все модели.
С QSqlTableModel у меня как-то не сложилось, наверное из-за его универсальности, не нравится он мне.

Можешь примерчиком поделиться более реальным, не таким как в экзамплах КЮТЭ....
А то я немножко не понимаю логики...
    AuthForm win(this);
    QSqlTableModel *model=new QSqlTableModel(this,db);
    model->setTable("users");
    win.ui.comboBox->setModel(model);
    win.ui.comboBox->setModelColumn(1);
    this->hide();
    if(!win.exec()) {
        this->close();
        return;
    }
    this->show();

Для теста вынес ui в публичные переменные...
В комбобоксе ни чего не появляется вообще... ПУСТО...

Сообщение отредактировал LE0N - 15.3.2009, 21:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 15.3.2009, 21:53
Сообщение #13


Профессионал
*****

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

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




Репутация:   44  


Цитата(LE0N @ 15.3.2009, 21:29) *
Можешь примерчиком поделиться более реальным, не таким как в экзамплах КЮТЭ....

Раскрывающийся текст

class SqlTableModel : public QAbstractTableModel
{
    Q_OBJECT
public:
    SqlTableModel( QObject *parent = 0, int idColumn = 0 );
    ~SqlTableModel();
....
        int                             rowCount( const QModelIndex &parent = QModelIndex() ) const;

public slots:
    void        refresh();                             // Выполнить запрос.

protected:
    virtual    void    prepareQuery() = 0;     // Настроить запрос (вызывается из refresh). Переопределяется в наследниках и настраивает запрос.

protected:
    QSqlQuery     *m_query;
};

class UserModel : public SqlTableModel
{
        Q_OBJECT
public:
        UserModel( QObject *parent = 0 );

                        QSqlRecord      record( id_t ) const;
                        int                   add( const QString &name, const QString &password );
                        int                   edit( id_t id, const QString &name, const QString &password );
                        bool                 canDelete( id_t ) const;
                        int                   del( id_t );

        virtual QVariant                headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
        virtual QVariant                data( const QModelIndex &index, int role = Qt::DisplayRole ) const;
        virtual int                         columnCount( const QModelIndex &parent = QModelIndex() ) const;

protected:
        virtual void    prepareQuery();
};

void UserModel::prepareQuery()
{
        m_query->prepare( "SELECT user.id, user.name, user.password FROM users" );
}

// Здесь может быть сложный запрос, который будет делать выборку из нескольких таблиц.
// Также можно настраивать ключи выборки, сортировки и т.д.


А дальше устанавливаешь эту модель в view и пользуешся. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 15.3.2009, 22:03
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

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




Репутация:   0  


о_О.
А как твоя модель узнает про m_query которая отпрепарилась?
И как пользоваться вьюяхами? Это те comboBox и проч ?
Я с QT работаю 3 дня от силы....
Можно по-подробнее ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 15.3.2009, 22:40
Сообщение #15


Профессионал
*****

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

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




Репутация:   44  


Цитата(LE0N @ 15.3.2009, 22:03) *
А как твоя модель узнает про m_query которая отпрепарилась?

void SqlTableModel::refresh()
{
        prepareQuery();
        if( !m_query->exec() )
              // Сохранили/сообщили об ошибке
}


UserModel model;
model.refresh();

QListView list;
list.setModel( &model );

QTableView table;
table.setModel( &model );
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.3.2009, 2:03
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(LE0N @ 16.3.2009, 1:03) *
Я с QT работаю 3 дня от силы....
Можно по-подробнее ?
тогда стоит почитать Программирование Модель/Представление

Давайте договоримся, в этой теме обсуждаются архитектурные особенности многопользовательского приложения с возможностью оговорок о реализации на Qt4.
А точные детали реализации на Qt обсуждаются в одноименном подфоруме, предварительно поискав в нем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 17.3.2009, 9:56
Сообщение #17


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

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




Репутация:   0  


Цитата
Давайте договоримся, в этой теме обсуждаются архитектурные особенности

Да, собственно, архитектурные особенности простейшего примерчика меня не интерисовали :)
Меня интерисовала реализация. Не хотелось писать грубыми хаками QTшных виджетов. Что, в итоге, и получилось...(Как мне показалось)
Кстати в QT имеется реализация в зародыше ActiveRecord связей... QSqlRelationalTableModel
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.3.2009, 14:32
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(LE0N @ 17.3.2009, 12:56) *
особенности простейшего примерчика
речь не идет о простейшем.

просто вопрос:
Цитата(LE0N @ 16.3.2009, 1:03) *
А как твоя модель узнает про m_query которая отпрепарилась?
не относится к теме "реализации многопользовательского приложения", это самостоятельная тема и обсуждать нужно отдельно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 20:54