R
Rus6lan5. Juni 2017 12:00

TableView в QSqlRelationalTableModel

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

Screenshot_1.png
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

5
Evgenii Legotckoi
  • 6. Juni 2017 07: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. Juni 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. Juni 2017 05:54

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

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

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

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

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

            Kommentare

            Nur autorisierte Benutzer können Kommentare posten.
            Bitte Anmelden oder Registrieren
            Letzte Kommentare
            A
            ALO1ZE19. Oktober 2024 08:19
            Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
            ИМ
            Игорь Максимов5. Oktober 2024 07:51
            Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas55. Juli 2024 11:02
            QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            k
            kmssr8. Februar 2024 18:43
            Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            Jetzt im Forum diskutieren
            J
            JacobFib17. Oktober 2024 03:27
            добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
            JW
            Jhon Wick1. Oktober 2024 15:52
            Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
            КГ
            Кирилл Гусарев27. September 2024 09:09
            Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
            F
            Fynjy22. Juli 2024 04:15
            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

            Folgen Sie uns in sozialen Netzwerken