R
Rus6lan5 июня 2017 г. 12:00

TableView в QSqlRelationalTableModel

Есть таблица студенты, есть таблицы преподаватели. Как сделать так, чтобы при выборе преподавателя в соседнем tableview автоматически показывалась модель этого преподавателя?

Screenshot_1.png
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

5
Evgenii Legotckoi
  • 6 июня 2017 г. 7:08
Не обязательно использовать QSqlRelationalModel. В принципе можно использовать и QSqlTableModel для этого. Суть в том, что нужно отслеживать клик по строкам в таблице преподавателей, забирать ID преподавателя и фильтровать записи в таблице со студентами преподавателя.
Как делается фильтр можете посмотреть в этой статье .
А так, делаете connect к QTableView , в котором у Вас находится список преподавателей:
 connect(ui->tableView, &QTableView::clicked, this, &MainWindow::clickedRow);
Сам слот с фильтром может выглядеть так:
void MainWindow::clickedRow(QModelIndex &index)
{
    modelStudents->setFilter(QString(ID_TEACHER = '%1').arg(model->data(model->index(index.row(), 0)).toInt());
    modelStudents->select();
}
    R
    • 7 июня 2017 г. 16:59

    Я идею понял, но сигналами беда.

    Во-первых я использую
    connect(dialog, EditDialog::insertToSqlModel,  this, MainWindow::insertToSqlModel);
    И вроде тоже работает(но я на всякий все сделал с амперсандом). Я не особо понимаю механизма передачи параметров в СЛОТ(Где почитать).
    Если я делаю слот таким
    void MainWindow::clickedRow(QModelIndex &index)
    {
        //QString filterQuery = QString("teacher_id = '%1'").arg(sqlModelTeachers->data(sqlModelTeachers->index(index.row(), 0)).toInt());
        sqlModelStudents->setFilter(QString("teacher_id = '%1'").arg(sqlModelTeachers->data(sqlModelTeachers->index(index.row(), 0)).toInt()));
        sqlModelStudents->select();
        ui->tableView_3->setModel(sqlModelStudents); 
    }
    То:
    D:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtCore\qglobal.h:732: error: static assertion failed: Signal and slot arguments are not compatible.
     #define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message)
    
    Если без параметров.
    
    void MainWindow::clickedRow()
    {    
    //QString filterQuery = QString("teacher_id = '%1'").arg(sqlModelTeachers->data(sqlModelTeachers->index(index.row(), 0)).toInt());    
    sqlModelStudents->setFilter(QString("teacher_id = '%1'").arg(sqlModelTeachers->data(sqlModelTeachers->index(4, 0)).toInt()));    
    sqlModelStudents->select();    
    ui->tableView_3->setModel(sqlModelStudents);
    }
    ТО все работает за исключением того, что фильтр не по выбранной колонке(потому что индекса нету), а просто по номеру в коде. ^
      Evgenii Legotckoi
      • 8 июня 2017 г. 5:54

      Почитайте вот эту статью по сигналам и слотам .

      Что касается ошибки, то дело в том, что сигнатура сигнала должна совпадать с сигнатурой слота.
      Расхождения в сигналах и слотах по сигнатуре может быть только в одном случае. Когда сигнал передаёт больше аргументов, чем принимает слот, но никак не наоборот.
      То есть, если сигнал такой:
      void someSignal(bool something);
      То слот должен быть таким же:
      void someSlot(bool something);
      Или в крайнем случае не иметь аргументов вовсе.
        R
        • 10 июня 2017 г. 6:24

        Вроде все заработало, когда я убрал поменял сигнатуры слота с такой:

        void MainWindow::clickedRow(QModelIndex &index)
        На такую:
        void MainWindow::clickedRow(QModelIndex index)
          Evgenii Legotckoi
          • 10 июня 2017 г. 10:07

          Это довольно странно. Это не сильно должно было повлиять на работоспособность.

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь
            AD

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:50баллов,
            • Очки рейтинга-4
            m
            • molni99
            • 26 октября 2024 г. 1:37

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:80баллов,
            • Очки рейтинга4
            m
            • molni99
            • 26 октября 2024 г. 1:29

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:20баллов,
            • Очки рейтинга-10
            Последние комментарии
            i
            innorwall13 ноября 2024 г. 23:03
            Как написать игру на Qt - Урок 3. Взаимодействие с другими объектами what is priligy tablets What happens during the LASIK surgery process
            i
            innorwall13 ноября 2024 г. 20:09
            Использование переменных объявленных в CMakeLists.txt внутри C++ файлов where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
            i
            innorwall11 ноября 2024 г. 22:12
            Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
            i
            innorwall11 ноября 2024 г. 18:23
            QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
            i
            innorwall11 ноября 2024 г. 15:50
            Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
            Сейчас обсуждают на форуме
            i
            innorwall14 ноября 2024 г. 0:39
            добавить qlineseries в функции Listen intently to what Jerry says about Conditional Acceptance because that s the bargaining chip in the song and dance you will have to engage in to protect yourself and your family from AMI S…
            i
            innorwall11 ноября 2024 г. 10:55
            Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
            9
            9Anonim25 октября 2024 г. 9:10
            Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
            ИМ
            Игорь Максимов3 октября 2024 г. 4:05
            Реализация навигации по разделам Спасибо Евгений!

            Следите за нами в социальных сетях