Russian Qt Forum
Ноябрь 23, 2024, 22:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: SIGNAL(cellChanged(int, int)) не сработывает  (Прочитано 3756 раз)
TanKis
Гость
« : Май 05, 2011, 17:06 »

использую модель QSqlRalationModel + QTableView
.cpp
Код:
views::views(QWidget *parent): QDialog(parent)
{
cbx = new QComboBox();
Vlayout = new QVBoxLayout;
Hlayout = new QHBoxLayout;
view = new QTableView();
editmodel          = new editablemodel(this);

           editAct          = new QAction( tr("Edit"),      view);
showMoreAct = new QAction( tr("Show more"), view);
showCell       = new QAction( tr("Show edited cell"), view);

view->setModel(model);
view->setItemDelegate(new QSqlRelationalDelegate(view));

//------------кнопки-------------------


Hlayout->addWidget(btnUndo);
Hlayout->addWidget(btnUndoAll);
Hlayout->addWidget(btnExit);

Vlayout->addLayout(Hlayout);
Vlayout->addWidget(view);

e=0;

           connect( editAct,    SIGNAL(triggered()), this, SLOT(edit()));
connect( showMoreAct,SIGNAL(triggered()), this, SLOT(show_more()));
connect( showCell,   SIGNAL(triggered()), this, SLOT(select_row()));



//connect( btnPlay,    SIGNAL(clicked()), this, SLOT(cell_play()));
connect( btnUndo,    SIGNAL(clicked()), this, SLOT(undo()));
connect( btnUndoAll, SIGNAL(clicked()), this, SLOT(undo_all()));
connect( btnExit,    SIGNAL(clicked()), this, SLOT(edit_end()));


connect(view, SIGNAL(cellChanged(int, int)), this, SLOT(select_row(int,int)));


setLayout(Vlayout);
resize(1200,400);
setWindowTitle(tr("Tables"));

}




//------откат на шаг-------
void views::undo()
{

}

//------отменить все---------
void views::undo_all()
{

}

//---------начать редактирование----------
void views::edit()
{
editmodel  = new editablemodel(this);
view->setModel(editmodel);

}

//---------выделение отредактированной строки------
void views::select_row()
{
view->selectRow(editmodel->row.toInt()-1);
//edit();
}
void views::select_row(int row, int column)
{
row=row+1;
column=column+1;
view->selectRow(row);
}

//--------завершить редактирование------
void views::edit_end()
{

}

//----------отобразить полную информацию по ячейке------------
void views::show_more()
{

}
void views::contextMenuEvent(QContextMenuEvent *event)
{
     QMenu menu(view);
     menu.addAction(editAct);
menu.addAction(showMoreAct);
menu.addAction(showCell);
view->addAction(editAct);
view->addAction(showMoreAct);
view->addAction(showCell);
     menu.exec(event->globalPos());
}

views::~views()
{

}






.h
Код:

class views : public QDialog
{
Q_OBJECT

public:
views(QWidget *parent=0);
~views();
QVariant a,r;
tablemodel *model;
editablemodel *editmodel;
strings *str;
int e,c;
void step(int &c);
QTableView   *view,*viewedit,*viewMore;
//void select_row();
private:
Ui::viewsClass ui;


queries *edits;
QSqlQueryModel  *model_more,*model_1;

QAction *editAct,*showMoreAct,*showCell;
QVBoxLayout  *Vlayout;
QHBoxLayout   *Hlayout;
QPushButton *btnUndo,*btnUndoAll,*btnExit;
QComboBox *cbx;
QSqlQuery *query5;


protected:
     void contextMenuEvent(QContextMenuEvent *event);

//signals:
// void cellChanged(int, int);

public slots:
void undo();
void undo_all();
void edit_end();
void select_row();
void select_row(int row, int column);
void edit();
void show_more();


};

#endif // VIEWS_H




почему не срабатывает cellChanged при переходе на след ячейку?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Май 05, 2011, 18:51 »

Как определил, что "не срабатывает слот"?

Добавь в слот ,например, QMessageBox::information(..... ) и определись, срабатывает слот или нет.
Записан
TanKis
Гость
« Ответ #2 : Май 06, 2011, 09:15 »

Спасибо, за ответ но...
так одна ерунда

Код:
void views::select_row(int row, int column)
{
QMessageBox::information(this, "Application name","Unable to find the user preferences file.\n""The factory default will be used instead.");
}

и все одно,- ничего не происходит при переходе на другую ячейку
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Май 06, 2011, 09:19 »

Сигнал cellChanged есть у QTableWidget, но не у QTableView.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
TanKis
Гость
« Ответ #4 : Май 06, 2011, 11:06 »

Спасибо, туплю
нужнобыло использовать SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &))
и теперь все выглядит так:
.cpp
Код:
SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &))
...
void views::select_row(const QModelIndex &, const QModelIndex &)
{

....

}

.h
Код:
voidselect_row(const QModelIndex &, const QModelIndex &);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.353 секунд. Запросов: 23.