Название: Связь между QTableView и QTreeWidget Отправлено: mark_o_polo от Март 13, 2010, 10:09 При выделении строки в таблице или нескольких строк те жеэлемента отмечаются в дереве:
connect(skkp_view, SIGNAL(clicked(const QModelIndex&)), this, SLOT(selected_SKP_Tree(const QModelIndex&))); это находится в слоте который вызывается при загрузке сценария из базы данных: Код: // вывод таблицы средств поместил в конструктор главного окна: connect(variant_NS, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(selected_SKP_Table(const QTreeWidgetItem *))); где variant_NS это (здесь же чуть выше) variant_NS = new QTreeWidget; variant_NS->setColumnCount(1); variant_NS->setHeaderLabel(QString::fromLocal8Bit("НС")); variant_NS->setSelectionMode(QAbstractItemView::ExtendedSelection); variant_NS->setItemSelected(variant_NS->topLevelItem(0), true); проблема в том, что при отмечании итема никакой реакции (не заходит в слот) Название: Re: Связь между QTableView и QTreeWidget Отправлено: mark_o_polo от Март 16, 2010, 13:43 В общем есть QSqlTableModel, данные отображаются в QTableView и QTreeWidget. Как сделать так, чтобы при изменении в дереве менялось в таблице. (наоборот - работает (см. выше))
variant_NS = new QTreeWidget; variant_NS->setColumnCount(1); variant_NS->setHeaderLabel(QString::fromLocal8Bit("НС")); variant_NS->setSelectionMode(QAbstractItemView::ExtendedSelection); variant_NS->setItemSelected(variant_NS->topLevelItem(0), true); пытаюсь вот так замутить: connect(variant_NS, SIGNAL(itemClicked(const QModelIndex&)), this, SLOT(selected_SKP_Table(const QModelIndex&))); не работает ПОДСКАЖИТЕ ПЛЗ КАК ЕЩЕ МОЖНО!!! Название: Re: Связь между QTableView и QTreeWidget Отправлено: alexman от Март 16, 2010, 14:02 Так если ты меняешь модель, то соответственно все view отобразят эти изменения...
Название: Re: Связь между QTableView и QTreeWidget Отправлено: mark_o_polo от Март 16, 2010, 14:50 нет я ставлю галочки в дереве, и мне надо, чтобы строки выделялись соответствующие в таблице
Название: Re: Связь между QTableView и QTreeWidget Отправлено: alexman от Март 16, 2010, 15:01 Попробуй этот сигнал void currentItemChanged ( QTableWidgetItem * current, QTableWidgetItem * previous ).
Название: Re: Связь между QTableView и QTreeWidget Отправлено: mark_o_polo от Март 16, 2010, 21:02 делал такой сигнал currentItemChanged ( QTableWidgetItem * current, QTableWidgetItem * previous ) и такой currentItemChanged ( QTreeWidgetItem * current, QTreeWidgetItem * previous ). Помещал в конструкторе главного окна (где объявляется переменная variant_NS) и в слоте PotokMainWindow::on_act_skkp_triggered() никакой реакции не происходит, когда ставлю галки в дереве, даже обидно..
Название: Re: Связь между QTableView и QTreeWidget Отправлено: alexman от Март 17, 2010, 17:04 делал такой сигнал currentItemChanged ( QTableWidgetItem * current, QTableWidgetItem * previous ) и такой currentItemChanged ( QTreeWidgetItem * current, QTreeWidgetItem * previous ). Помещал в конструкторе главного окна (где объявляется переменная variant_NS) и в слоте PotokMainWindow::on_act_skkp_triggered() никакой реакции не происходит, когда ставлю галки в дереве, даже обидно.. Код покажи. Должно работать!Название: Re: Связь между QTableView и QTreeWidget Отправлено: mark_o_polo от Март 20, 2010, 17:16 Да, но заработало только когда я убрал аргументы, сейчас пустые скобки
connect(variant_NS, SIGNAL(currentItemChanged()), this, SLOT(selected_SKP_Table())); Теперь нужно, чтобы кликаешь на дереве - отмечалось в QTableView та же строчка, помогите с кодом плз, срочно нужно, а я новичек, которого нелегкая занесла в дебри ООП. для примера слот который отвечает за то, что когда отмечаешь в таблице - и в дереве отмечалось вот коннекты: Код: connect(skkp_view, SIGNAL(clicked(const QModelIndex&)), this, SLOT(selected_SKP_Tree(const QModelIndex&))); и слоты Код: void PotokMainWindow::selected_SKP_Tree(const QModelIndex & index ) Название: Re: Связь между QTableView и QTreeWidget Отправлено: mark_o_polo от Март 20, 2010, 17:25 skkp_view это QTableView
Название: Re: Связь между QTableView и QTreeWidget Отправлено: alexman от Март 21, 2010, 20:49 Да, но заработало только когда я убрал аргументы, сейчас пустые скобки Так это основа основ синтаксиса Qt ;)Название: Re: Связь между QTableView и QTreeWidget Отправлено: alexman от Март 21, 2010, 21:04 Например, соединяешь сигнал void clicked ( const QModelIndex & index ) из QAbstractItemView со слотом void treeClicked ( const QModelIndex & index ); а там выполняешь void QTableView::selectRow ( int row ). Что не понятно?
Название: Re: Связь между QTableView и QTreeWidget Отправлено: mark_o_polo от Март 24, 2010, 09:47 да, спасибо, получается.
Делаю так Код: QItemSelectionModel* skkp_selection_model = variant_NS->selectionModel() ; но в таблице почему-то выделена только 1 строка с наибольшим номером n, все остальные не выделяются, хотя при выполнении цикла он проходит по всем ранее выделенным строкам. Почему в таблице отображается только одна выделенная? Как сделать, чтобы все отображались выделенными? Название: Re: Связь между QTableView и QTreeWidget Отправлено: mark_o_polo от Март 26, 2010, 11:01 В приведенном в предыдущем посте цикле, selectRow(n) выполняется именно для тех n, которые соответсвуют отмеченным итемам в дереве. Но когда цикл проходит до конца, то в таблице отображается выделенной только одна строка, соответсвующая последнему значению n, для которого было выполнено selectRow(n). Если убрать галочку в дереве с этого итема, то в таблице выделяется строка строка, соответсвующая бывшему предпоследнему, а, после снятия галки, последнему отмеченному итему в дереве.
Как сделать, чтобы в таблице были выделены - визуально! все строки, соотв. дереву?!! ??? |