Results 1 to 2 of 2

Thread: nested tables

  1. #1
    Join Date
    May 2007
    Location
    Netherlands
    Posts
    11
    Thanked 3 Times in 3 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default nested tables

    Hi,

    I have a though question. On which way tables can be nested? I am busy with an xml editor and it would be nice if the tables could be nested.

    Any thoughts?


    Cheers,

    Jeroen

  2. #2
    Join Date
    May 2006
    Posts
    788
    Thanks
    49
    Thanked 48 Times in 46 Posts
    Qt products
    Qt4
    Platforms
    MacOS X Unix/X11 Windows

    Default Re: nested tables

    Quote Originally Posted by Jeroen van der Waal View Post
    Hi,
    I have a though question. On which way tables can be nested? I am busy with an xml editor and it would be nice if the tables could be nested.
    Jeroen
    Here you find a tree structure on a mysql sample...
    Link on comment... && http://www.klempert.de/nested_sets/artikel/

    IMO: much work to get it running.

    Qt Code:
    1. #define TREEQUERY "SELECT n.*, round((n.rgt-n.lft-1)/2,0) AS childs, count(*)+(n.lft>1) AS level, ((min(p.rgt)-n.rgt-(n.lft>1))/2) > 0 AS lower, (( (n.lft-max(p.lft)>1) )) AS upper FROM PCMS_CAT n, PCMS_CAT p WHERE n.lft BETWEEN p.lft AND p.rgt AND (p.root_id = n.root_id) AND (p.id != n.id OR n.lft = 1) GROUP BY n.root_id,n.id ORDER BY n.root_id,n.lft"
    2.  
    3.  
    4. /*
    5.  
    6. download query from
    7. http://www.klempert.de/nested_sets/
    8.  
    9. demo
    10. http://www.klempert.de/nested_sets/demo/
    11.  
    12. CREATE TABLE `PCMS_CAT` (
    13.   `id` int(12) NOT NULL auto_increment,
    14.   `root_id` int(12) NOT NULL default '0',
    15.   `name` varchar(35) NOT NULL default 'Category-Name-New',
    16.   `lft` int(12) NOT NULL default '0',
    17.   `rgt` int(12) NOT NULL default '0',
    18.   `xmlattribute` longblob NOT NULL,
    19.   PRIMARY KEY (`id`),
    20.   UNIQUE KEY `id` (`id`),
    21.   KEY `id_2` (`id`),
    22.   KEY `root_id` (`root_id`),
    23.   KEY `lft` (`lft`),
    24.   KEY `rgt` (`rgt`)
    25. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=152 ;
    26.  
    27.  */
    28.  
    29.  
    30. void Panel::GoTree()
    31. {
    32. QStringList langs = db->LanguageAvaiable();
    33. QString teme,imageicon,toolssett;
    34. QIcon defic;
    35.  
    36.  
    37. QSqlQuery query("",db->currentDatabase());
    38. itecats.clear(); /* clear attributes !!! */
    39. bool have = query.exec(TREEQUERY);
    40. //////db->SqlLog(TREEQUERY,have);
    41. TOTsumrowCAT = query.numRowsAffected();
    42.  
    43. if (TOTsumrowCAT == 0) {
    44. QMessageBox::warning(this, tr("Error"),tr("Null item Found, Now table are ready. \nReopen application.").arg(TREETABLE));
    45. return;
    46. }
    47.  
    48.  
    49. QStandardItemModel *model = new QStandardItemModel(categorie);
    50. QList<QStandardItem *> sub3; /* flat rowlines level x */
    51. QList<QStandardItem *> sub4; /* flat rowlines */
    52. QList<QStandardItem *> sub5; /* flat rowlines */
    53. QList<QStandardItem *> sub6; /* flat rowlines */
    54. QList<QStandardItem *> rootlines; /* flat rowlines */
    55. QStandardItem *parentItem = model->invisibleRootItem();
    56. model->setHorizontalHeaderItem(0,new QStandardItem(QString("Name")));
    57. model->setHorizontalHeaderItem(1,new QStandardItem(QString("Level")));
    58. model->setHorizontalHeaderItem(2,new QStandardItem(QString("Id")));
    59. bool aoappend;
    60. QList<QStandardItem *> inerows;
    61.  
    62.  
    63. ////////////qDebug() << "summ category " << TOTsumrowCAT;
    64.  
    65. while (query.next()) {
    66. /* data */
    67. QString name = query.value(2).toString();
    68. int dbid = query.value(0).toInt();
    69. int level = query.value(7).toInt();
    70. int moveup = direct_int(query.value(9).toString());
    71. int movedown = direct_int(query.value(8).toString());
    72. int childer = direct_int(query.value(6).toString());
    73. QByteArray precode(QByteArray::fromBase64(query.value(5).toByteArray()));
    74.  
    75. DataAttributes motor;
    76. motor.Setup(precode,langs);
    77. motor.SetValue("name",name);
    78. motor.SetValue("level",level);
    79. motor.SetValue("child",childer);
    80. motor.SetValue("goup",moveup);
    81. motor.SetValue("dbnummer",dbid);
    82. motor.init();
    83. CateAttribute *CatAttXML = new CateAttribute(motor,dbid,langs);
    84. CatAttXML->SetDbConnection(db);
    85. connect(CatAttXML, SIGNAL(PLoad()), this , SLOT(Reload()));
    86.  
    87. itecats.append(CatAttXML);
    88.  
    89. aoappend = true;
    90. inerows.clear();
    91. QStandardItem *s0 = new QStandardItem(name);
    92. QStandardItem *s1 = new QStandardItem(QString("%1").arg( level ));
    93. QStandardItem *s2 = new QStandardItem(QString("%1").arg( dbid ));
    94.  
    95. s0->setFlags ( Qt::ItemIsEnabled );
    96. s1->setFlags ( Qt::ItemIsEnabled );
    97. s2->setFlags ( Qt::ItemIsUserCheckable );
    98. s0->setToolTip ( motor.GetToolTips() );
    99. s0->setIcon ( QIcon(QString::fromUtf8(":/img/info.png")) );
    100. s2->setIcon ( QIcon(QString::fromUtf8(":/img/folder.png")) );
    101. inerows.append(s0);
    102. inerows.append(s1);
    103. inerows.append(s2);
    104.  
    105. qDebug() << "name-> " << name;
    106.  
    107.  
    108. /* */
    109.  
    110. if (level == 2) {
    111. rootlines.append(s0);
    112. parentItem->appendRow(inerows);
    113. } else if (level > 2) {
    114.  
    115. QStandardItem *before; /* last from any level */
    116. if (level == 3) {
    117. before = rootlines.last();
    118. sub3.append(s0);
    119. } else if (level == 4) {
    120. before = sub3.last();
    121. sub4.append(s0);
    122. } else if (level == 5) {
    123. before = sub4.last();
    124. sub5.append(s0);
    125. } else if (level == 6) {
    126. before = sub5.last();
    127. sub6.append(s0);
    128. } else {
    129. aoappend = false;
    130. }
    131. if (aoappend) {
    132. before->appendRow(inerows);
    133. }
    134. }
    135.  
    136. /* if level 1 end */
    137. } /* while sql */
    138.  
    139.  
    140.  
    141.  
    142. categorie->setModel(model);
    143. categorie->expandAll();
    144. categorie->resizeColumnToContents (0);
    145. categorie->resizeColumnToContents (1);
    146. categorie->resizeColumnToContents (2);
    147. connect(categorie, SIGNAL(clicked(QModelIndex) ), this , SLOT(ActiveTre(QModelIndex) ));
    148. }
    To copy to clipboard, switch view to plain text mode 


    my dream are to become an answer on Thread http://www.qtcentre.org/forum/f-qt-p...ovie-7403.html
    as exchange
    Attached Images Attached Images
    Last edited by patrik08; 6th June 2007 at 17:43.

Similar Threads

  1. large tables and QSqlTableModel
    By peter in forum Qt Programming
    Replies: 0
    Last Post: 15th October 2006, 21:18
  2. QDataTable with two tables
    By cristiano in forum Qt Tools
    Replies: 1
    Last Post: 14th September 2006, 17:26
  3. MySQL, locking tables
    By gunhelstr in forum Qt Programming
    Replies: 4
    Last Post: 6th September 2006, 02:00
  4. Nested signals and slots
    By vishva in forum Qt Programming
    Replies: 2
    Last Post: 18th August 2006, 09:47
  5. QTable resize problem with large tables
    By Robzzz in forum Newbie
    Replies: 3
    Last Post: 22nd May 2006, 14:13

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.