Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
1

Получение сигнала после выбора строки в tableview

03.01.2015, 06:18. Показов 4393. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Парни подскажите есть ли какой нибудь сигнал при двойном нажатии на строку из tableview?
У меня в Tableview выгружается информация из таблицы, несколько строк...
Хочу чтоб при двойном нажатии на любую строку , создавалась форма...
Как добавить форму знаю, не знаю как получить сигнал двойного клика на строчку в tableview... В qt такая возможность есть?
Заранее спасибо всем кто откликнется на вопрос.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2015, 06:18
Ответы с готовыми решениями:

Обновление tableview после выбора пункта combobox
Всех с новым годом) Помогите пожалуйста в решении следующей проблемы. У меня на главном окне...

Получение данных из компонента tableView
Доброго времени суток. В моей базе данных есть представление которое красиво выводит информацию на...

Получение значения выделенной ячейки tableView
Всем доброго времени суток. Пишу программу на QT Creater, используя модели, требуется взять...

Диалоги выбора цвета и шрифта - получение результата выбора
Имеем функцию Function FUN_OPEN_FONT() As String ' диалог выбора ЦВЕТА '...

7
63 / 63 / 15
Регистрация: 20.08.2014
Сообщений: 593
03.01.2015, 08:58 2
Примерно так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
tableView   = new QTableView;
    tableView->setModel(model);
    tableView->setItemDelegate(new QSqlRelationalDelegate(this));
    tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    tableView->resizeColumnsToContents();
    tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
connect(tableView,SIGNAL(doubleClicked(QModelIndex)),
            this,SLOT(insertRecord()));
void MyClass::insertRecord(){
      MyForm *form = new MyForm;
      form->show();
}
1
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
03.01.2015, 16:46  [ТС] 3
Спасибо все работает, нужное окно вызывается... Появился другой нюанс...

мне нужно по 2 щелчку вызывать 5 разных окон, в зависимости от того какие данные сейчас загружены в tableview.
Если загружены данные о возвратах то будет вызвано окно для редактирования возвратов, если загружены расходные накладные то будет вызвано окно для редактирования расходных накладных.
Сейчас естественно при любой загрузке вызывается одно и тоже окно...
Данные загружаются после выбора в combobox

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void MainWindow::echoChanged(int index)
{
    QSqlQueryModel *rashodnie = new QSqlQueryModel;
    QSqlQuery query;
switch (index){
case 0:
    query.exec("SELECT * FROM rashodnie_nacladnie");
    break;
case 1:
    query.exec("SELECT * FROM vozvrati");
break;
case 2:
    query.exec("SELECT * FROM d_postuplenia");
    break;
case 3:
    query.exec("SELECT * FROM prihodi");
break;
case 4:
    query.exec("SELECT * FROM spisania");
break;
 
    default:
            return;  }
rashodnie->setQuery(query);
ui->tableView->setModel(rashodnie);
}
Можно как то связь эту установить чтоб учитывалось из какой таблицы сейчас выгружены данные, и тогда после двойного клика вызывалось нужное окно.

Добавлено через 24 секунды
C++ (Qt)
1
2
3
4
void MainWindow::insertRecord(){
      Prosmotrrashodnakladnih *prosmotrnakladnih = new Prosmotrrashodnakladnih;
      prosmotrnakladnih->show();
}
Добавлено через 26 минут
вот сейчас вызывается 2 формы , вместо определенной одной...
C++ (Qt)
1
2
3
4
5
6
7
void MainWindow::insertRecord(){
      Prosmotrrashodnakladnih *prosmotrnakladnih = new Prosmotrrashodnakladnih;
      prosmotrnakladnih->show();
 
      ProsmotrVozvratov *prosmotrvozvratov = new ProsmotrVozvratov;
      prosmotrvozvratov->show();
}
Добавлено через 5 часов 16 минут
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mainwindow1.h"
#include "ui_mainwindow1.h"
#include "voditeli.h"
#include "ui_voditeli.h"
#include "kontragenti.h"
#include "ui_kontragenti.h"
#include "torgoviepredstaviteli.h"
#include "ui_torgoviepredstaviteli.h"
#include<QSqlQuery>
#include <QtSql/QSqlTableModel>
#include "addrashodnainakladnai.h"
#include "ui_addrashodnainakladnai.h"
#include "prosmotrrashodnakladnih.h"
#include "ui_prosmotrrashodnakladnih.h"
#include "prosmotrvozvratov.h"
#include "ui_prosmotrvozvratov.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
   ui->pushButton->setIcon(QIcon("C:/tt/lesson/one/table_add.png"));
   ui->pushButton_2->setIcon(QIcon("C:/tt/lesson/one/table_delete.png"));
   QSqlQueryModel *rashodnie = new QSqlQueryModel;
   QSqlQuery query;
   query.exec("SELECT * FROM rashodnie_nacladnie");
   rashodnie->setQuery(query);
   ui->tableView->setModel(rashodnie);
   connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(echoChanged(int)));
   connect(ui->tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(insertRecord()));
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
 
 
void MainWindow::on_action_4_triggered()
{
    this->close();
}
 
void MainWindow::on_action_5_triggered()
{
   MainWindow1 *w1 = new  MainWindow1;
   w1->show();
}
 
void MainWindow::on_action_2_triggered()
{
   Voditeli *v1= new Voditeli;
   v1->show();
}
 
void MainWindow::on_action_triggered()
{
    Kontragenti *k1= new Kontragenti;
    k1->show();
}
 
void MainWindow::on_action_3_triggered()
{
    Torgoviepredstaviteli *t1= new Torgoviepredstaviteli;
    t1->show();
}
 
 
void MainWindow::on_pushButton_clicked()
{
 AddRashodnaiNakladnai * ras = new AddRashodnaiNakladnai;
 ras->show();
}
 
void MainWindow::echoChanged(int index)
{
    QSqlQueryModel *rashodnie = new QSqlQueryModel;
    QSqlQuery query;
switch (index){
case 0:
    query.exec("SELECT * FROM rashodnie_nacladnie");
    break;
case 1:
    query.exec("SELECT * FROM vozvrati");
break;
case 2:
    query.exec("SELECT * FROM d_postuplenia");
    break;
case 3:
    query.exec("SELECT * FROM prihodi");
break;
case 4:
    query.exec("SELECT * FROM spisania");
break;
 
    default:
            return;  }
rashodnie->setQuery(query);
ui->tableView->setModel(rashodnie);
}
 
void MainWindow::insertRecord(){
      Prosmotrrashodnakladnih *prosmotrnakladnih = new Prosmotrrashodnakladnih;
      prosmotrnakladnih->show();
 
      ProsmotrVozvratov *prosmotrvozvratov = new ProsmotrVozvratov;
      prosmotrvozvratov->show();
}
0
205 / 165 / 41
Регистрация: 25.10.2013
Сообщений: 527
04.01.2015, 04:01 4
Цитата Сообщение от lexflax Посмотреть сообщение
Можно как то связь эту установить чтоб учитывалось из какой таблицы сейчас выгружены данные, и тогда после двойного клика вызывалось нужное окно.
Можно - просто запоминай индекс выбранных данных(сделай соответствующую переменную в классе) и точно также по запомненному индексу вызывай нужное тебе окно.
И, посмотрел я сейчас на твой код, не забывай выделенные через new ресурсы освобождать через delete! Сами по себе они не освободятся!!
1
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
04.01.2015, 10:21  [ТС] 5
Добавил переменную класса, переменная nomer.
Сделал через if

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void MainWindow::insertRecord(){
    if (nomer==0){
 
 
      Prosmotrrashodnakladnih *prosmotrnakladnih = new Prosmotrrashodnakladnih;
      prosmotrnakladnih->show();}
    else {
 
 
      ProsmotrVozvratov *prosmotrvozvratov = new ProsmotrVozvratov;
      prosmotrvozvratov->show();
 
    }
}
Не получается сделать через switch сделать
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void MainWindow::insertRecord()
{
 
    switch (nomer){
    case 0:
        Prosmotrrashodnakladnih *prosmotrnakladnih = new Prosmotrrashodnakladnih;
        prosmotrnakladnih->show();
        break;
    case 1:
        ProsmotrVozvratov *prosmotrvozvratov = new ProsmotrVozvratov;
        prosmotrvozvratov->show();
    break;
 
      default:
           return;  }
 
}
Пишет ошибки

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\tt\lesson\one\mainwindow.cpp:118: ошибка: jump to case label [-fpermissive]
     case 1:
          ^
C:\tt\lesson\one\mainwindow.cpp:115: error:   crosses initialization of 'Prosmotrrashodnakladnih* prosmotrnakladnih'
         Prosmotrrashodnakladnih *prosmotrnakladnih = new Prosmotrrashodnakladnih;
                                  ^
C:\tt\lesson\one\mainwindow.cpp:123: ошибка: jump to case label [-fpermissive]
       default:
       ^
C:\tt\lesson\one\mainwindow.cpp:119: error:   crosses initialization of 'ProsmotrVozvratov* prosmotrvozvratov'
         ProsmotrVozvratov *prosmotrvozvratov = new ProsmotrVozvratov;
                            ^
C:\tt\lesson\one\mainwindow.cpp:115: error:   crosses initialization of 'Prosmotrrashodnakladnih* prosmotrnakladnih'
         Prosmotrrashodnakladnih *prosmotrnakladnih = new Prosmotrrashodnakladnih;
                                  ^
Добавлено через 8 минут
в чем проблема можно как то через switch сделать?
0
63 / 63 / 15
Регистрация: 20.08.2014
Сообщений: 593
04.01.2015, 13:29 6
Лучший ответ Сообщение было отмечено lexflax как решение

Решение

C++ (Qt)
1
2
3
4
5
6
7
8
9
case 0:{
     //code
     break;
}
case 1:{
       //code
       break;
}
....
Попробуйте в скобочки кейсы взять. Иногда помогает.
не по теме:
И завязывайте с транслитом. Читать невозможно. Я тоже английского не знаю толком. поэтому гугл-транслит мой друг.
1
205 / 165 / 41
Регистрация: 25.10.2013
Сообщений: 527
04.01.2015, 17:37 7
Цитата Сообщение от lexflax Посмотреть сообщение
Не получается сделать через switch сделать
void MainWindow::insertRecord()
{
switch (nomer){
* * case 0:
* * * * Prosmotrrashodnakladnih *prosmotrnakladnih = new Prosmotrrashodnakladnih;
* * * * prosmotrnakladnih->show();
* * * * break;
* * case 1:
* * * * ProsmotrVozvratov *prosmotrvozvratov = new ProsmotrVozvratov;
* * * * prosmotrvozvratov->show();
* * break;
default:
* * * * * *return; *}
}
Выше абсолютно правильно написали - чтобы в switch какую-либо переменную объявить и работать с ней - вы по правилам должны сиё действие заключать в скобки.
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
04.01.2015, 17:39  [ТС] 8
Я понял.
Вопрос решен, всем спасибо)
0
04.01.2015, 17:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2015, 17:39
Помогаю со студенческими работами здесь

Макрос для добавления строки после выбора пункта со спадающего меню
Здравствуйте. Прошу помощи в написании макроса. Задание заключается в: 1) При выборе в строке...

File not found extension was unheeded после выбора картинки в диалоге выбора файла
MySQL DB вот код Private Sub Button2_Click(sender As Object, e As EventArgs) Handles...

После выбора варианта загрузки система виснет - Windows XP . загрузка идет тока с выбора безопасного режима
вот видио Кто знает что такое ?

Как сделать так, чтобы после выбора данного элемента в поле выбора отобразились еще и названия групп?
Ситуация такая: Имеем Документ с Полем Выбора; - кликаем на кнопку выбора(1) и выбираем элемент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru