crossplatform.ru

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

> Каким образом QTableView меняет QSqlQuery?, Ткните плс носом туда, где об этом подробно написанно.
Stanislaus
  опции профиля:
сообщение 23.4.2008, 16:09
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 17
Регистрация: 23.4.2008
Пользователь №: 156

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




Репутация:   0  


Столкнулся тут с неким багом(?). Сделал обработчик сигнала doublrClicked для QTableView:
connect(ui.scripts, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(updateScript(QModelIndex)));


Сам слот:
void ScriptEditor::updateScript(const QModelIndex &index)
{

    QSqlDatabase db = QSqlDatabase::database("mc");
    QSqlQuery scripts_query = dynamic_cast<QSqlQueryModel *>(ui.scripts->model())->query();

    QSqlQuery q(db);
    if (!q.prepare("select gui.fetch_script(?)"))
        qDebug() << "F*ck!";
    q.bindValue(0,scripts_query.record().value("id").toInt());
    
    if (!q.exec())
        qDebug() << "F*ck!";
    q.next();
    QTextDocument *doc = new QTextDocument;
    doc->setPlainText(q.value(0).toString());
    if (scripts_query.value(4).toInt()==PERL) phl.setDocument(doc);
    ui.scriptEdit->setDocument(doc);
    currentScriptID = scripts_query.value(0).toInt();
    ui.scriptCaption->setText(scripts_query.value(1).toString());
}


Коннекшн:

void MainWin::initConnections ()
{
    QSqlDatabase db;
    if (QSqlDatabase::isDriverAvailable("QPSQL"))

        db = QSqlDatabase::addDatabase("QPSQL", "mc");
    else {
        qDebug() << trUtf8("Нету драйвера для postgreSQL..."));
        return;
    }
    db.setHostName("10.10.1.123");
    db.setPort(5433);
    db.setDatabaseName("DBNAME");
    db.setUserName("user");
    db.setPassword("password");
    if (!db.open()){
        QMessageBox::critical(this, trUtf8("Мдя..."), db.lastError().text());
        return;
    }
}


Когда я открываю даблкликом документы перемещаясь по строкам вниз QTableView, все нормально, но, как только я начинаю перемещаться с нижних строк на верхние, он открывает предыдущий нижний документ (последний scripts_query.value(1) == предыдущему scripts_query.value(1)), хотя вью и модель изменились.

У меня Qt GPL 4.3.4, скомпилированная Visual C++ 2008 Express Edition, h-ки и библиотеки для PSQL от PostgreSQL 8.3.1.

Хочу добавить, что под X11 все пашет идеально.

Короче застрял, если нужны какие-нибудь дополнительные данные, сообщите.

Сообщение отредактировал Stanislaus - 23.4.2008, 16:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 23.4.2008, 19:23
Сообщение #2


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

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

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




Репутация:   94  


положение выделения это отдельная тема и реализуется отдельным классам, читай тут: Обработка выбора элементов в представлениях

простой примерчик от Макса Шлее:
#include <QtGui>

// ----------------------------------------------------------------------
int main(int argc, char** argv) 
{
    QApplication app(argc, argv);
    QWidget      wgt;

    QStringListModel model;
    model.setStringList(QStringList() << "Item1" << "Item2" << "Item3");

    QTreeView* pTreeView = new QTreeView;
    pTreeView->setModel(&model);

    QListView* pListView = new QListView;
    pListView->setModel(&model);

    QTableView* pTableView = new QTableView;
    pTableView->setModel(&model);

    QItemSelectionModel selection(&model);
    pTreeView->setSelectionModel(&selection);
    pListView->setSelectionModel(&selection);
    pTableView->setSelectionModel(&selection);

    //Layout setup
    QHBoxLayout* phbxLayout = new QHBoxLayout;
    phbxLayout->addWidget(pTreeView);
    phbxLayout->addWidget(pListView);
    phbxLayout->addWidget(pTableView);
    wgt.setLayout(phbxLayout);

    wgt.show();

    return app.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 20.6.2025, 13:47