Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QSqlRelational ComboBox Delegate doesn't work with items more than 255

QSqlRelational ComboBox Delegate doesn't work with items more than 255

Scheduled Pinned Locked Moved Unsolved General and Desktop
4 Posts 2 Posters 1.0k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    Swerved
    wrote on last edited by
    #1

    Qt 5.7.0:

    I have a relation set up whereby there are more than 255 items in the combobox delegate.

    Changing the data structure is /not/ an option as this is an interface for a database I haven't created.

    Essentially the problem is thus:

    • Set up relation delegate on column that has more than 255 items in the delegate
    • Change the item index in the QSqlRelationalTableView to any item after index 255.
    • The combobox reverts.
    • Similarly, if the current index of the delegate is > 255 and I enter the editor, the current index automatically changes to 0.

    Does anybody have any idea what solutions I could use for this?

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      Can you show the code you are using for that to happen ?

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • S Offline
        S Offline
        Swerved
        wrote on last edited by
        #3

        The table referencing in table_name is the table that I have loaded from the db.
        A column may contain a range from 1-1000 (as an example), which I then use relationmap table to get the information I need (a relation table, the uid and name) to set up the itemDelegateforColumn.

        It works fine, for most things, but if I am using the delegate to convert ids for a whole bunch of person ids for example (which there can be hundreds), it just doesn't work when using the delegate.

        I am also using an Access DB for this, in case this information is of any use. I don't really have a choice to change that. Though I could see if its an issue using similar data in a SQL DB instead.

        Anyway, here's the relevant code, inside a function called setupTable(), which decides what table model type to use, depending on a user setting. (SqlTableModel or SqlRelationalTableModel).

        QSqlRelationalTableModel *editor = new QSqlRelationalTableModel(this);
                           editor->setTable(table_name);
                           editor->setEditStrategy(QSqlTableModel::OnFieldChange);
                           // Setup table relations.
                           QStringList columndelegateid;
                           QStringList columndelegatename;
                           for (int i = 0; i < relations.size(); i++) // relations is a QStringList comprising all relations for each column.
                           {
                               QString current_index = relations.at(i);
                               QStringList record = current_index.split(",");
                               editor->setRelation(record.at(0).toInt(), QSqlRelation(record.at(1), record.at(2), record.at(3)));
                               columndelegateid << record.at(0);
                               columndelegatename << record.at(1);
                           }
                           // Setup table headers
                           QSqlQuery rcol;
                           rcol.exec("SELECT * FROM relationmap WHERE tbl = '"+table_name+"' ORDER BY UID ASC");
                           while (rcol.next())
                           {
                               editor->setHeaderData(result2.toInt(), Qt::Horizontal, result);
                           }
                           rcol.clear();
                           //Selecting the model
                           editor->setSort(0, Qt::AscendingOrder);
                           while (editor->canFetchMore())
                           {
                               editor->fetchMore();
                           }
                           editor->select();
        
                           ui->advanced_editor_table->setModel(editor);
                           for (int i = 0; i < columndelegateid.size(); i++)
                           {
                               QSqlQuery checktableexists;
                               if (!checktableexists.exec("SELECT Count(*) AS Count FROM "+columndelegatename.at(i)+""))
                               {
                                   emit sendNotice("Error in query", ""+check+" does not exist");
                               }
                               else
                               {
                                   ui->advanced_editor_table->setItemDelegateForColumn(columndelegateid.at(i).toInt(), new QSqlRelationalDelegate(ui->advanced_editor_table));
                               }
        					   checktableexists.clear();
                           }
                           ui->advanced_editor_table->verticalHeader()->hide();
                           ui->advanced_editor_table->show();
        
        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          One thing that I find surprising is the call to select on "editor" after calling fetchMore.

          Also, you should consider using a bit more intermediate variables, your code, while not pretty big, is not verbose enough to be easy to follow.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved