crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
dzyk
  опции профиля:
сообщение 12.9.2008, 15:35
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

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




Репутация:   0  


Вообщем, хочу сделать так, чтобы TableModel после изменения одной из ячеек строке в 100ой, например - виджет снова вернулся на 100ую строку, которую редактировал пользователь. Для этого хочу отловить событие
void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal]

.. и ничего не получается :(

сигнал принимает объект главного окна... отлично обрабатываются события от QAbstractItemView.
А вот QSqlTableModel и QAbstractItemModel ну никак ... помогите.!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.9.2008, 17:39
Сообщение #2


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

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

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




Репутация:   94  


Цитата(dzyk @ 12.9.2008, 19:35) *
и ничего не получается
Цитата(dzyk @ 12.9.2008, 19:35) *
ну никак
а точнее
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 12.9.2008, 17:51
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 12.9.2008, 18:39) *
а точнее

QSqlTableModel *sqm_tecushie;
MyWindow::MyWindow(QWidget *parent)
    : QMainWindow(parent)
{ 
sqm_tecushie = new QSqlTableModel(this,db);
...
connect(sqm_tecushie, SIGNAL( dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) ), this, SLOT(sqm_tecushie_ dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight )));
 ...
}

void MyWindow::sqm_tecushie_dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight )){
 
QMessageBox::critical(0,  "Внимание","Произошло событие dataChanged - пользователь изменил данные.", QMessageBox::Cancel);
}


смотрел исходники класса ... перепробывал все стратегии.. в тч когда отправляется сигнал dataChange
bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    
    case OnFieldChange: {
        ...
     
    case OnRowChange:
      ...
        emit dataChanged(index, index);
       .
    case OnManualSubmit: {
       ...
        emit dataChanged(index, index);
       .
  .
}
Причина редактирования: у тэга код указывай параметр: code=cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.9.2008, 17:57
Сообщение #4


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

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

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




Репутация:   94  


замечание первое и главное в функции:
connect у сигналов и слотов нельзя указывать имена параметров, только их тип.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 12.9.2008, 18:13
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

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




Репутация:   0  


connect(sqm_tecushie, SIGNAL(dataChanged (QModelIndex, QModelIndex ) ), this, SLOT(sqm_tecushie_dataChanged (QModelIndex , QModelIndex )));

не помогло :(

Litkevich Yuriy,
Я ведь такую ошибку давно бы нашел.
Эх, кто бы попробовал отловить сигнал ... :rolleyes:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.9.2008, 18:15
Сообщение #6


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

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

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




Репутация:   94  


Цитата(dzyk @ 12.9.2008, 22:13) *
не помогло
а ты неправильно написал, ссылки-то зачем удалил, болжно быть так:
connect(sqm_tecushie, SIGNAL( dataChanged ( const QModelIndex &, const QModelIndex &) ), this, SLOT(sqm_tecushie_ dataChanged ( const QModelIndex &, const QModelIndex &)));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 12.9.2008, 18:17
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

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




Репутация:   0  


Litkevich Yuriy, я когда код постил - брал из Ассистента, в моих исходниках connect написан верно.

Litkevich Yuriy, и beforeUpdate сигнал класса QSqlTableModel пробовал - :( ничего....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.9.2008, 18:19
Сообщение #8


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

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

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




Репутация:   94  


и еще слоты и сигналы удобно отлаживать при наличие консоли. Добавь в файл проекта:
CONFIG += console

Цитата(dzyk @ 12.9.2008, 22:17) *
брал из Ассистента, в моих исходниках connect написан верно.
дай мне ссылку на пример из Асистента
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 12.9.2008, 18:21
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

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




Репутация:   0  


Litkevich Yuriy, может вы сами попробуете ?? ну очень прошу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.9.2008, 18:23
Сообщение #10


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

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

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




Репутация:   94  


выкладывай наипростейший пример в котором есть эта проблема
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 12.9.2008, 18:25
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

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




Репутация:   0  


Litkevich Yuriy,
Цитата(Litkevich Yuriy @ 12.9.2008, 19:19) *
дай мне ссылку на пример из Асистента


qthelp://com.trolltech.qt.440/qdoc/qabstractitemmodel.html#dataChanged

Цитата(Litkevich Yuriy @ 12.9.2008, 19:23) *
выкладывай наипростейший пример в котором есть эта проблема

щас напишу
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.9.2008, 18:36
Сообщение #12


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

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

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




Репутация:   94  


Цитата(dzyk @ 12.9.2008, 22:25) *
qabstractitemmodel.html#dataChanged
вижу только описание функции, в упор невижу примера в котором в функции connect можно использовать имена параметров/аргументов в сигналах и слотах.

исправь свою функцию connect как я написал

Читай внимательно описание к функции connect
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 12.9.2008, 19:11
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

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




Репутация:   0  


Litkevich Yuriy, Огромное спасибо. Ошибка у меня где то в коде проекта. Написал простой пример и все в нем ОК.
 #include <QtGui>
 #include <QtSql>

 int main(int argc, char *argv[]) {
 
    QApplication app(argc, argv);
 
    QSqlDatabase db;   

    db = QSqlDatabase::addDatabase("QSQLITE", "base_ex.db");
    QString file="base_ex.db";
    db.setDatabaseName(file);
    db.open();
   
     QSqlTableModel *sqm_tecushie;
     sqm_tecushie = new QSqlTableModel(0,db);
     sqm_tecushie->setTable("sample");
     sqm_tecushie->select();
  
 
     QTableView *view = new QTableView();
     view->setModel(sqm_tecushie);
 
      
     view->resizeRowsToContents();
     view->resizeColumnsToContents();
     view->show();
     
     QTableView *view2 = new QTableView();
     view2->setModel(sqm_tecushie);
     
     QObject::connect(sqm_tecushie,
     SIGNAL( dataChanged ( const QModelIndex &, const QModelIndex &) ),
     view2,
     SLOT(show()));
     
     
 
     return app.exec();
 }
Причина редактирования: не забываем тэг: code=cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 12.9.2008, 19:21
Сообщение #14


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

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




Репутация:   3  


dzyk, включи все-таки консоль, т.к. если ошибка в коннекте, то Qt тебе тут же скажет об этом (выведет на консоль)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
dzyk
  опции профиля:
сообщение 12.9.2008, 19:30
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 13.4.2008
Пользователь №: 148

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




Репутация:   0  


void*, ОК.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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