Page 1 of 2 12 LastLast
Results 1 to 20 of 26

Thread: Refresh QDataTable

  1. #1
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Exclamation Refresh QDataTable

    hii friends

    i have a QDataTable widget in the dialog that contains data from mysql database.
    now when the dialog gets loaded i want that the data table should show the changes immediately if the database gets changed. i.e. data table should update itself around every (for example) 3secs.

    i have tried out calling the method "refresh()" like this : dataTable1->refresh()
    (dataTable1 is the name which i have given to this QDataTable widget in the dialog.)

    it dint worked.
    i am editing the code in kdevelop and from there also i tried calling the function "update()"
    but the error says " update undeclared ".

    the code which i have got has got this function "update()" to refresh the table and there it is working. but in my code it is not. i have included the header files pthread.h and unistd.h (i donno wheather it has got anything to do with it or not).

    please tell me how to refresh this qdatatable.

    thanks and regards.
    shamik

  2. #2
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    From where did you invoke refresh()?

  3. #3
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    refresh is invoked from the thread created from within main function
    then main loads a dialog which again loads another dialog which contains the QDataTable. and i want to refresh this QDataTable.


    regards
    shamik

  4. #4
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Quote Originally Posted by shamik View Post
    refresh is invoked from the thread created from within main function
    It won't work this way. Read this carefully: http://doc.trolltech.com/3.3/threads.html

    Actually you don't need a whole thread just to invoke refresh() every 3 seconds --- you can use QTimer instead.

  5. The following user says thank you to jacek for this useful post:

    shamik (27th November 2006)

  6. #5
    Join Date
    Sep 2006
    Location
    Rio de Janeiro, Brazil
    Posts
    44
    Thanks
    2
    Thanked 3 Times in 3 Posts
    Qt products
    Qt3 Qt4
    Platforms
    MacOS X Unix/X11

    Default Re: Refresh QDataTable

    Use Qtimer,

    QTimer *timer = new QTimer( this );
    connect( timer, SIGNAL(timeout()), SLOT(refreshTable()) );
    timer->start( 3000, FALSE ); /* 3 seconds single-shot timer 3000 */

    void MainForm::refreshTable()
    {
    dataTable->refresh(QDataTable::RefreshData);
    }

  7. The following user says thank you to ederbs for this useful post:

    shamik (27th November 2006)

  8. #6
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    thanks for the code and the suggestion friends,

    but i dont wanna use qtimer and qthreads. i only want to use pthreads. there are few gui and i think if one gets terminated then the qtimer will stop working (i dont know 4 sure but i'll try).

    but please tell me how to do it using pthreads.

    shamik

  9. #7
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Quote Originally Posted by shamik View Post
    ti think if one gets terminated then the qtimer will stop working (i dont know 4 sure but i'll try).
    No, it won't stop unless you destroy it or block the event loop.

    Quote Originally Posted by shamik View Post
    please tell me how to do it using pthreads.
    You will have to use custom events to notify the GUI that it has to refresh itself and of course the effect will be exactly the same as if you were using QTimer.

  10. #8
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    i have tried out wit the QTimer.
    the timer is getting executed but the QDataTable is not getting updated i.e. refreshed.
    i set the timer of 3 secs . and the only work it had to do was to print a value and refresh the table.
    it was printing the value correctly every 3secs but never refreshed the table.
    i have made another project file through which i make changes in the mysql database and that changes should get reflected in this project when the timer runs. but it is still not getting refreshed or updated.

    the function which i tried are : dataTable->refresh(QDataTable::RefreshData);
    dataTable->refresh();

    none of these worked.

    please tell me what to do with it. in the project which i have got as a sample, update() is used to refresh the table. the only difference between that and the one which i have made is in that project QTable is used and i am using QDataTable.
    but whenever i write update() function then the compiler immediately gives update() undeclared.

    now wat ?? is there any solution?

    shamik

  11. #9
    Join Date
    Jan 2006
    Location
    Kerala
    Posts
    371
    Thanks
    76
    Thanked 37 Times in 32 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Could you please provide a minimum compilable example ?
    We can't solve problems by using the same kind of thinking we used when we created them

  12. #10
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    main.cpp is as under :
    Qt Code:
    1. #include <qapplication.h>
    2. #include "loginfrm.h"
    3. #include "editfrm.h"
    4. #include<qsqldatabase.h>
    5. #include<qstring.h>
    6. #include <qthread.h>
    7. #include <stdlib.h>
    8. #include <qwidget.h>
    9. #include <qtimer.h>
    10.  
    11. int main( int argc, char **argv )
    12. {
    13. QApplication a( argc, argv );
    14. QSqlDatabase *db = QSqlDatabase::addDatabase("QMYSQL3");
    15. db->setDatabaseName("logindb");
    16. db->setUserName("root");
    17. db->setPassword("");
    18. db->setHostName("localhost");
    19. db->open();
    20. if ( !db->open())
    21. {
    22. qWarning(" database connection no thayu ");
    23. }
    24.  
    25. editfrm efrm;
    26.  
    27. a.setMainWidget( &efrm );
    28.  
    29. efrm.show();
    30. qWarning("waiting for login");
    31. qWarning("creating timer");
    32. QTimer *timer = new QTimer( &efrm , "mt" );
    33. efrm.connect( timer, SIGNAL(timeout()), SLOT(refreshTable()) );
    34. timer->start( 5000, FALSE ); /* 3 seconds single-shot timer 3000 */
    35. a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    36.  
    37. qWarning("Leaving main");
    38. return a.exec();
    39.  
    40. }
    To copy to clipboard, switch view to plain text mode 
    NOTE : the editfrm gets some of its values from loginfrm because it is loaded first. but for the ease of understanding i have directly called editfrm from the main. It might be incorrect from the implementation point of view but it is absolutely correct logically. The loginfrm does nothing but initializes some global variables so that editfrm can use it. In the actual code the loginfrm is loaded first and then if the login is correct then the editfrm is loaded. It is only here that i have changed main function to show() the editfrm directly.

    editfrm.ui.h is as follows :
    Qt Code:
    1. #include<qapplication.h>
    2. #include<qsqldatabase.h>
    3. #include "loginfrm.h"
    4. #include "modifyfrm.h"
    5. #include <qwidget.h>
    6. #include<qdatatable.h>
    7. #include <qtimer.h>
    8. #include<qthread.h>
    9. #include <qobject.h>
    10. #include <qtable.h>
    11. #include <qsqlcursor.h>
    12.  
    13. static int btn;
    14. static int i=0;
    15.  
    16. void editfrm::initvalues()
    17. {
    18.  
    19. loginfrm *lfrm = new loginfrm();
    20.  
    21. if ( lfrm->check())
    22. {
    23. PB_add->setEnabled(TRUE);
    24. PB_edit->setEnabled(TRUE);
    25. PB_delete->setEnabled(TRUE);
    26. }
    27. else
    28. {
    29. PB_add->setEnabled(FALSE);
    30. PB_edit->setEnabled(FALSE);
    31. PB_delete->setEnabled(FALSE);
    32. }
    33.  
    34. }
    35.  
    36.  
    37. void editfrm::addclicked()
    38. {
    39. btn=1;
    40. modifyfrm *mfrm = new modifyfrm();
    41. mfrm->initvalues();
    42. hide();
    43. mfrm->show();
    44. }
    45.  
    46.  
    47. void editfrm::editclicked()
    48. {
    49.  
    50. btn=2;
    51. modifyfrm *mfrm = new modifyfrm();
    52. mfrm->initvalues();
    53. hide();
    54. mfrm->show();
    55. }
    56.  
    57.  
    58. void editfrm::deleteclicked()
    59. {
    60. btn=3;
    61. modifyfrm *mfrm = new modifyfrm();
    62. mfrm->initvalues();
    63. hide();
    64. mfrm->show();
    65. }
    66.  
    67. int editfrm::checkbtn()
    68. {
    69. return btn;
    70. }
    71.  
    72. void editfrm::cancelclicked()
    73. {
    74. loginfrm *lfrm = new loginfrm(this);
    75. hide();
    76. lfrm->show();
    77. }
    78.  
    79. void editfrm::refreshTable()
    80. {
    81. QString swar="";
    82. swar.sprintf("tick tick %d",i);
    83. qWarning(swar);
    84. dataTable1->update();
    85. dataTable1->repaint(true);
    86. dataTable1->refresh(QDataTable::RefreshAll);
    87. update();
    88. i++;
    89. }
    To copy to clipboard, switch view to plain text mode 
    as per the timer after every 3 secs "tick tick i " is printed but the datatable is not getting updated or refreshed.
    as u can see i have tried out with update(), repaint(), refresh(), none of which is working here. the datatable is failing to show the updated database. The database is getting updated from another GUI which is out of this project. I simultaneously run both the project 's GUI and after making changes in the database from one GUI in one project it doesnt get showed in the GUI of another project.

    i hope atleast now the picture is very much clear.
    please help me solve this problem

    thanks and regards
    shamik
    Last edited by jacek; 28th November 2006 at 10:19. Reason: missing [code] tags

  13. #11
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Quote Originally Posted by shamik View Post
    I simultaneously run both the project 's GUI and after making changes in the database from one GUI in one project it doesnt get showed in the GUI of another project.
    Can you see those changes if you connect to the database using a SQL console?

  14. #12
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    Quote Originally Posted by jacek View Post
    Can you see those changes if you connect to the database using a SQL console?
    what do you mean by this SQL console? how to start it??

  15. #13
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Quote Originally Posted by shamik View Post
    what do you mean by this SQL console? how to start it??
    It's a program that allows you to issue SQL queries to the database server. AFAIR MySQL calls it "mysql".

  16. #14
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    i opened the console and typed mysql
    then mysql prompt appeared. do you mean this as mysql console??

    now i typed the select query on that particular table. now the table is shown on the console.
    keeping that open, i ran the exe of the project through which i want to change the database content. i made the changes from its GUI. but the sql table in the console showed the same result (it is obvious). to see the changes i have to write the query in the console again. then i can see the changes.

    this is the case with the original project too. the qdatatable widget doesnt reflect the changes as it should be. but whenever i hide it and show other dialog and then again i hide the second dialog and show the original dialog with qdatatable widget then i can see the changes. (hiding and showing is implemented with the help of necessary functions inside the code like show(), hide() ).


    if u call opening mysql from console which gives u mysql prompt like this-->
    mysql>

    then it is obvious that it wil show the changes in the database only if u write the query again after changing it from the GUI.

    if u r talking of any other MYSQL console then please tell me how to open it and how to work on it. i'll try on that also.

  17. #15
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Quote Originally Posted by shamik View Post
    but whenever i hide it and show other dialog and then again i hide the second dialog and show the original dialog with qdatatable widget then i can see the changes. (hiding and showing is implemented with the help of necessary functions inside the code like show(), hide() ).
    Can you see the changes if you keep that QDataTable shown for more than 5 seconds (i.e. long enough for the timer to emit the signal)?

  18. #16
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    no.

    no changes are seen in the qdatatable no matter howlong i keep the timer going on

  19. #17
    Join Date
    Jan 2006
    Location
    Kerala
    Posts
    371
    Thanks
    76
    Thanked 37 Times in 32 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    It might be possible that the changes you make to the database from the client are not commited !!

    So, You can try comitting the changes to database.
    One more thing, Hope you are setting the interval as 3000 for 3 Sec
    We can't solve problems by using the same kind of thinking we used when we created them

  20. #18
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    i have treid commiting the database after every record change but still it isnt working. the timer time can b anything, may be 3, 5, 7 sec etc. that is not a problem.
    after the database is changed the timer may go on to even ticking 40 times still there is no change in the QDataTable.

    even if the QDataTable is kept shown for say 5 mins then also there is no change in it. i.e. the updated values are not shown.

    is there anything that v m missing ? i donno why does this simple one takes too much of time.
    please help me

  21. #19
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    5,372
    Thanks
    28
    Thanked 976 Times in 912 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Refresh QDataTable

    Can you see the changes if you update your database using the console (i.e. "mysql" program)?

  22. #20
    Join Date
    Sep 2006
    Posts
    102
    Thanks
    5
    Qt products
    Qt3
    Platforms
    Unix/X11

    Default Re: Refresh QDataTable

    No
    cant see the changes in the QDataTable even if i change the database from mysql prompt :
    mysql>

    i dont understand what is the problems.??
    There are 10 kinds of people in this world. Those who understand binary, and those who dont.

    regards
    shamik

Similar Threads

  1. row QDataTable
    By cristiano in forum Qt Programming
    Replies: 1
    Last Post: 18th November 2006, 17:07
  2. Replies: 9
    Last Post: 7th November 2006, 15:10
  3. QDataTable Inserts and Updates
    By ederbs in forum Qt Programming
    Replies: 2
    Last Post: 26th October 2006, 23:23
  4. displaying any table on a qdatatable
    By Philip_Anselmo in forum Newbie
    Replies: 4
    Last Post: 9th May 2006, 22:12
  5. Refreshing QDataTable
    By zlatko in forum Qt Programming
    Replies: 5
    Last Post: 2nd May 2006, 16:11

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.