Results 1 to 6 of 6

Thread: Simple QT SQL Viewer/Updater... Revisited

  1. #1
    Join Date
    Aug 2008
    Posts
    38
    Thanks
    15
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Simple QT SQL Viewer/Updater... Revisited

    Hello all,
    First I am on Windows 7 Pro, 64bit, using QT creator 2.4.1 and QT version 4.8.1.
    I am working on a simple SQL Viewer/Editor in a Table view. I have made connection to a SQL Server DB via ODBC and have no issues updating records/deleting records or adding records. I do have two minor issues that I would like to resolve and they are as follows:
    1. Requires 2 Esc Key presses to get to signal/slot on Nav bar.
    - I have a nav widget I made which handles goto first, prev, next, last, new, delete and x of y records. Also in this bar I have an icon which I want to change to something when the record is "dirty". Then once either cancelled or submitted the icon goes back to "locked" or "clean". This is similar to MS Access which had the "..(pencil)" icon which would show up on editing a record either in table view or in form view.
    - the issue I have is 1 escape key will revert the table view back to original state, but I do not seem to be able to intercept this to trigger my signal to change the icon back.
    - Is there something I can do to either intercept the first table-view revert signal (must be internal) and act on it?

    2. After "submitting" a record to the db when using "Enter" key the table model resets causing the highlighted row to go back to not visible and the user then needs to arrow or click to regain entry mode to the table.
    - I of course can work around this, but I would like it to either stay in the same field and just submit or else redirect it to the next row down if available. I have been trying to do this using the "RowChanged" event but no matter which settings I change (like reloading the model or incrementing a line counter to set the current record to) it will not take it until it has been either arrow key or mouse click to the desired row.

    Code will follow, if you have any suggestions, please feel free to respond! (This is only the questionable frmStatus code) if the rest of the application code is needed please feel free to let me know and I will post it!

    Thanks to all,
    AlphaWolfXV

    frmStatus.ui
    Qt Code:
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <ui version="4.0">
    3. <class>frmStatus</class>
    4. <widget class="QDialog" name="frmStatus">
    5. <property name="windowModality">
    6. <enum>Qt::WindowModal</enum>
    7. </property>
    8. <property name="geometry">
    9. <rect>
    10. <x>0</x>
    11. <y>0</y>
    12. <width>485</width>
    13. <height>300</height>
    14. </rect>
    15. </property>
    16. <property name="sizePolicy">
    17. <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
    18. <horstretch>1</horstretch>
    19. <verstretch>0</verstretch>
    20. </sizepolicy>
    21. </property>
    22. <property name="windowTitle">
    23. <string>Dialog</string>
    24. </property>
    25. <property name="modal">
    26. <bool>true</bool>
    27. </property>
    28. <widget class="QWidget" name="verticalLayoutWidget">
    29. <property name="geometry">
    30. <rect>
    31. <x>9</x>
    32. <y>9</y>
    33. <width>471</width>
    34. <height>281</height>
    35. </rect>
    36. </property>
    37. <layout class="QVBoxLayout" name="verticalLayout">
    38. <item>
    39. <widget class="QLabel" name="label">
    40. <property name="font">
    41. <font>
    42. <family>Calibri</family>
    43. <pointsize>15</pointsize>
    44. <weight>75</weight>
    45. <bold>true</bold>
    46. <underline>true</underline>
    47. </font>
    48. </property>
    49. <property name="text">
    50. <string>Add / Edit Status Definitions in the Database</string>
    51. </property>
    52. <property name="alignment">
    53. <set>Qt::AlignCenter</set>
    54. </property>
    55. </widget>
    56. </item>
    57. <item>
    58. <widget class="QTableView" name="tableView"/>
    59. </item>
    60. </layout>
    61. </widget>
    62. </widget>
    63. <resources/>
    64. <connections/>
    65. </ui>
    To copy to clipboard, switch view to plain text mode 

    Remaining frmStatus Code:
    frmStatus.cpp
    Qt Code:
    1. #include "frmstatus.h"
    2. #include "ui_frmstatus.h"
    3.  
    4. frmStatus::frmStatus(QWidget *parent) :
    5. QDialog(parent),
    6. ui(new Ui::frmStatus)
    7. {
    8. ui->setupUi(this);
    9. tableModel = new QSqlTableModel();
    10. tableModel->setTable("tStatus");
    11. tableModel->setEditStrategy(QSqlTableModel::OnRowChange);
    12. tableModel->select();
    13. tableModel->setHeaderData(0, Qt::Horizontal, tr("Status ID"),Qt::DisplayRole);
    14. tableModel->setHeaderData(1,Qt::Horizontal,tr("Status Description"), Qt::DisplayRole);
    15.  
    16. qDebug()<<"row count:"<<tableModel->rowCount();
    17.  
    18. nav = new dbrecordnav(this);
    19. QHBoxLayout *hb1 = new QHBoxLayout();
    20. hb1->addWidget(new QLabel(""),1);
    21. hb1->addWidget(nav);
    22. hb1->addWidget(new QLabel(""),1);
    23. ui->verticalLayout->addLayout(hb1);
    24. nav->setCurrentRec( 1);
    25. nav->setTotalRec(tableModel->rowCount());
    26. ui->tableView->setModel(tableModel);
    27. ui->tableView->horizontalHeader()->setClickable(true);
    28. QModelIndex mi = ui->tableView->model()->index(0,1);
    29. ui->tableView->setCurrentIndex(mi);
    30. setModal(true);
    31. #ifdef RELEASE
    32. ui->tableView->hideColumn(0);
    33. #endif
    34. ui->tableView->resizeColumnToContents(1);
    35. itemSelModel = new QItemSelectionModel(tableModel,this);
    36. itemSelModel = ui->tableView->selectionModel();
    37. ui->tableView->installEventFilter(this);
    38. //ui->tableView->setItemDelegateForColumn(1,statusDescEdit);
    39. connect(nav,SIGNAL(first()),this,SLOT(go2First()));
    40. connect(nav,SIGNAL(prev()),this,SLOT(go2Prev()));
    41. connect(nav,SIGNAL(next()),this,SLOT(go2Next()));
    42. connect(nav,SIGNAL(last()),this,SLOT(go2Last()));
    43. connect(nav,SIGNAL(newrec()),this,SLOT(addStatus()));
    44. connect(nav,SIGNAL(deleterec()),this,SLOT(deleteStatus()));
    45. connect(nav,SIGNAL(changeRecord(int)),this,SLOT(go2Rec(int)));
    46. connect(this,SIGNAL(dirty()),nav,SLOT(handleDirtyRecord()));
    47. connect(this,SIGNAL(revert()),nav,SLOT(handleCleanRecord()));
    48. // connect(nav,SIGNAL(storeRecChanges()),this,SLOT(saveCurRec()));
    49. connect(itemSelModel, SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), this, SLOT(rowChanged(QModelIndex, QModelIndex)));
    50.  
    51. }
    52.  
    53. frmStatus::~frmStatus()
    54. {
    55. delete ui;
    56. }
    57. bool frmStatus::eventFilter(QObject *object, QEvent *e)
    58. {
    59. if(object == ui->tableView)
    60. {
    61. if (e->type() == QEvent::KeyPress)
    62. {
    63. QKeyEvent *keyEvent = static_cast<QKeyEvent*>(e);
    64. #ifdef DEBUG
    65. qDebug() << "EVENT FILTER key press" << keyEvent->key();
    66. #endif
    67. if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return)
    68. {
    69. #ifdef DEBUG
    70. qDebug()<<"Pressed Enter key before model reset!";
    71. #endif
    72. //goahead and try to save
    73. if(!tableModel->submit()){qDebug()<<"Submit failed... try again!"<<tableModel->lastError().text();}
    74.  
    75. //e->ignore();
    76. return true;
    77. }
    78. else if(keyEvent->key() == Qt::Key_Down)
    79. {
    80. this->go2Next();
    81. return true;
    82. }
    83. else if(keyEvent->key() == Qt::Key_Up)
    84. {
    85. this->go2Prev();
    86. return true;
    87. }
    88. else if(keyEvent->key() == Qt::Key_Escape)
    89. {
    90. qDebug()<<"EVENT FILTER: Escape pressed";
    91. blnDirty = false;
    92. revertForm();
    93. return true;
    94. }
    95. else
    96. {
    97. //dirty
    98. qDebug()<<"form dirty...";
    99. blnDirty = true;
    100. emit dirty();
    101. return false;
    102. }
    103. }
    104. else
    105. {
    106. return false;
    107. }
    108. }
    109. else
    110. {
    111. // pass the event on to the parent class
    112. return QDialog::eventFilter(object, e);
    113. }
    114. }
    115.  
    116. void frmStatus::rowChanged(QModelIndex current, QModelIndex previous)
    117. {
    118. disconnect(itemSelModel,SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),this,SLOT(rowChanged(QModelIndex, QModelIndex)));
    119. if(current.row()==-1)
    120. {
    121. nav->setCurrentRec(previous.row()+1);
    122. tableModel->select();
    123. ui->tableView->setModel(tableModel);
    124. itemSelModel = ui->tableView->selectionModel();
    125.  
    126. QModelIndex mi = ui->tableView->model()->index(previous.row(),1);
    127. ui->tableView->setCurrentIndex(mi);
    128. ui->tableView->setRootIndex(mi);
    129. itemSelModel->setCurrentIndex(mi,QItemSelectionModel::Current);
    130. #ifdef DEBUG
    131. qDebug()<<"Model Reset!";
    132. qDebug()<<"Current index of table view:"<<ui->tableView->currentIndex().row();
    133. #endif
    134.  
    135. }
    136. else
    137. {
    138. qDebug()<<"Normal Cell Change..." <<current.row()<<previous.row();
    139. nav->setCurrentRec(current.row()+1);
    140. if(!(tableModel->submit())){qDebug()<<"Error with submit on row change:"<<tableModel->lastError().text();}
    141. qDebug()<<"Normal Cell Change...After Submit!" <<current.row()<<previous.row();
    142. //ui->tableView->setModel(tableModel);
    143. // itemSelModel = ui->tableView->selectionModel();
    144. //QModelIndex mi = ui->tableView->model()->index(0,1);
    145. //ui->tableView->setCurrentIndex(mi);
    146. //ui->tableView->setRootIndex(mi);
    147. //itemSelModel->setCurrentIndex(mi,QItemSelectionModel::Current);
    148. }
    149. connect(itemSelModel, SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), this, SLOT(rowChanged(QModelIndex, QModelIndex)));
    150. qDebug()<<"atend_Current index of table view:"<<ui->tableView->currentIndex().row();
    151. }
    152.  
    153.  
    154. void frmStatus::addStatus()
    155. {
    156. tableModel->insertRows(0,1);
    157. tableModel->setData(tableModel->index(0,1),QString(" "));
    158. if(!tableModel->submit()){qDebug()<<"Submit failed... try again!"<<tableModel->lastError().text();}
    159. nav->setTotalRec(tableModel->rowCount());
    160. QModelIndex mi = ui->tableView->model()->index(tableModel->rowCount()-1,1);
    161. ui->tableView->setCurrentIndex(mi);
    162. ui->tableView->resizeRowsToContents();
    163. nav->setCurrentRec(ui->tableView->currentIndex().row()+1);
    164. }
    165. void frmStatus::deleteStatus()
    166. {
    167. qDebug()<<"Current index of table view:"<<ui->tableView->currentIndex().row();
    168. tableModel->removeRow(nav->getCurrentRec()-1);
    169. if(!tableModel->submit()){qDebug()<<"Submit failed... try again!"<<tableModel->lastError().text();}
    170. nav->setTotalRec(tableModel->rowCount());
    171. QModelIndex mi = ui->tableView->model()->index(tableModel->rowCount()-1,1);
    172. ui->tableView->setCurrentIndex(mi);
    173. nav->setCurrentRec(ui->tableView->currentIndex().row()+1);
    174. qDebug()<<"Current index of table view:"<<ui->tableView->currentIndex().row();
    175. ui->tableView->resizeRowsToContents();
    176. }
    177.  
    178. void frmStatus::go2First()
    179. {
    180. QModelIndex mi = ui->tableView->model()->index(0,1);
    181. ui->tableView->setCurrentIndex(mi);
    182. nav->setCurrentRec(ui->tableView->currentIndex().row()+1);
    183. }
    184. void frmStatus::go2Prev()
    185. {
    186. //check if already at beginning...
    187. if(!(ui->tableView->currentIndex().row() == 0))
    188. {
    189. QModelIndex mi = ui->tableView->model()->index(ui->tableView->currentIndex().row()-1,1);
    190. ui->tableView->setCurrentIndex(mi);
    191. nav->setCurrentRec(ui->tableView->currentIndex().row()+1);
    192. }
    193. }
    194. void frmStatus::go2Next()
    195. {
    196. //check if already at end...
    197. if(!(ui->tableView->currentIndex().row() == tableModel->rowCount()-1))
    198. {
    199. QModelIndex mi = ui->tableView->model()->index(ui->tableView->currentIndex().row()+1,1);
    200. ui->tableView->setCurrentIndex(mi);
    201. nav->setCurrentRec(ui->tableView->currentIndex().row()+1);
    202. }
    203. }
    204. void frmStatus::go2Last()
    205. {
    206. QModelIndex mi = ui->tableView->model()->index(tableModel->rowCount()-1,1);
    207. ui->tableView->setCurrentIndex(mi);
    208. nav->setCurrentRec(ui->tableView->currentIndex().row()+1);
    209. }
    210. void frmStatus::go2Rec(int a)
    211. {
    212. QModelIndex mi = ui->tableView->model()->index(a-1,1);
    213. ui->tableView->setCurrentIndex(mi);
    214. nav->setCurrentRec(ui->tableView->currentIndex().row()+1);
    215. }
    216.  
    217. /*void frmStatus::keyPressEvent(QKeyEvent *event)
    218. {
    219.   if(event->key()==Qt::Key_Escape)
    220.   {
    221.   qDebug()<<"STATUS FORM - Esc pressed";
    222.   blnDirty = false;
    223.   revertForm();
    224.   }
    225.   else if(event->key() == Qt::Key_Return||event->key() == Qt::Key_Enter)
    226.   {
    227.   qDebug()<<"Enter Key Pressed - STATUS FORM";
    228.   }
    229.   else
    230.   {
    231.   qDebug()<<"form dirty...";
    232.   blnDirty = true;
    233.   emit dirty();
    234.   }
    235. }*/
    236. void frmStatus::revertForm()
    237. {
    238. emit revert(); //resets nav icon...
    239. }
    240.  
    241. /*
    242.   The following are only used in Forms with mappign widgets not controlled by a table view.
    243.   here the view handles all the submitting etc... we don't need to do any additional...
    244.   just connect up the signals/slots to make the form function as we want...*/
    245. /*
    246. void frmStatus::disconnectDirty(){}
    247. void frmStatus::connectDirty(){}
    248. void frmStatus::setDirty() { blnDirty = true; emit dirty();qDebug()<<"we got a dirty() signal!";} //set whenever something changes on the form
    249. void frmStatus::setDirty(int){blnDirty = true;emit dirty();} //set whenever something changes on the form
    250. void frmStatus::setDirty(QString){blnDirty = true;emit dirty();} //set whenever something changes on the form
    251. void frmStatus::setDirty(QDate){blnDirty = true;emit dirty();} //set whenever something changes on the form
    252. void frmStatus::revertForm()
    253. {
    254.  
    255. }
    256.  
    257. bool frmStatus::getCurRecData()
    258. {
    259.   bool res;
    260.   return res;
    261. }
    262. bool frmStatus::getUpdateRecData()
    263. {
    264.   bool res;
    265.   return res;
    266. }
    267. bool frmStatus::updateSQLData()
    268. {
    269.   bool res;
    270.   return res;
    271. }
    272. bool frmStatus::handleNewRec()
    273. {
    274.   bool res;
    275.   return res;
    276. }
    277.  
    278. void frmStatus::saveCurRec()
    279. {
    280.  
    281. }
    282. */
    To copy to clipboard, switch view to plain text mode 

    frmStatus.h
    Qt Code:
    1. #ifndef FRMSTATUS_H
    2. #define FRMSTATUS_H
    3.  
    4. #include <QDialog>
    5. #include <QtGui>
    6. #include <QtSql>
    7. #include "globals.h"
    8. #include "../qtWidgets/recordNav/dbrecordnav.h"
    9. namespace Ui {
    10. class frmStatus;
    11. }
    12. //tStatus Enum
    13. enum{
    14. tStatus_Id = 0,
    15. tStatus_Desc = 1 };
    16. struct statusForm{
    17. int id;
    18. QString statusDesc;
    19. };
    20.  
    21. class frmStatus : public QDialog
    22. {
    23. Q_OBJECT
    24.  
    25. public:
    26. explicit frmStatus(QWidget *parent = 0);
    27. ~frmStatus();
    28.  
    29. public slots:
    30. signals:
    31. void dirty();
    32. void revert();
    33. protected:
    34. //void keyPressEvent(QKeyEvent *event);
    35. bool eventFilter(QObject *w, QEvent *e);
    36. //bool event(QEvent *e);
    37. protected slots:
    38.  
    39. private slots:
    40. void rowChanged(QModelIndex, QModelIndex);
    41. void addStatus();
    42. void deleteStatus();
    43. void go2Prev();
    44. void go2First();
    45. void go2Last();
    46. void go2Next();
    47. void go2Rec(int a);
    48. // void setDirty();
    49. // void setDirty(int);
    50. // void setDirty(QString);
    51. // void setDirty(QDate);
    52. // void saveCurRec(void);
    53. private:
    54. void revertForm();
    55. Ui::frmStatus *ui;
    56. QItemSelectionModel *itemSelModel;
    57. dbrecordnav *nav;
    58. QSqlTableModel *tableModel;
    59. bool blnDirty;
    60. };
    61.  
    62. #endif // FRMSTATUS_H
    To copy to clipboard, switch view to plain text mode 

  2. #2
    Join Date
    Aug 2008
    Posts
    38
    Thanks
    15
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Simple QT SQL Viewer/Updater... Revisited

    Hello All,
    Please advise if anything needs further clarification!
    Thanks,
    AlphaWolfXV

  3. #3
    Join Date
    Aug 2008
    Posts
    38
    Thanks
    15
    Qt products
    Qt4
    Platforms
    Windows

    Question Re: Simple QT SQL Viewer/Updater... [QTableView-keyEvents]

    Hello all,
    Ok, I think I have a more basic question:
    I believe that the reason I am not able to get the ESC key captured is that the QTableView is handling it (by default) and returning true. So, if this is true, then I believe I need to re-implement the keyevent that QTableView is getting and return "FALSE" and then let the main eventFilter() handle the actual keypress... Will this work? How and what do I reimplement (or which class should I subclass to obtain this functionality?) I have tried to look through QTableView but eventFilter() does not seem to be a valid item to change... Any thoughts? I think both answers to the above questions are tied to this concept, any help is much appreciated.
    Thanks,
    AlphaWolfXV
    Last edited by AlphaWolfXV; 26th July 2013 at 04:30. Reason: modified title to better represent questions

  4. #4
    Join Date
    Aug 2008
    Posts
    38
    Thanks
    15
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Simple QT SQL Viewer/Updater... Revisited

    Hi All,
    Ok, so I have made some progress as to what not to do...!

    I have made a QLineEdit Delegate and applied to the QTableView.
    Then I subclassed QLineEdit to make the delegate and reimplemented the keyPressEvent(). I can catch almost all keys except for escape and tab...
    Then I tried to make an eventFilter on the lineedit subclass to see if I could capture it there... still nothing...

    Is there a "normal" way to get a hold of the escape key from a qtableview???
    Thanks,
    AlphaWolfXV

    Oh, also I have been attempting to catch with a QShortcut but that is not proving effective with the Escape key. It is seemingly being captured and dealt with long before any event is called... But where to catch it!
    Thanks again,
    AlphaWolfXV

  5. #5
    Join Date
    Aug 2008
    Posts
    38
    Thanks
    15
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Simple QT SQL Viewer/Updater... Revisited

    Hello again,
    Quick update:
    I have created a line edit delegate applied to the qtableview column of choice. This works good. Then I implemented the eventFilter(obj,event) in the lineEditDelegate which now ignores any special key press events and passes all back to the parent. This is good, I think, I am now trying to handle reset of the model etc via the parent widget and will keep you all posted!
    Thanks,
    AlphaWolfXV

  6. #6
    Join Date
    Aug 2008
    Posts
    38
    Thanks
    15
    Qt products
    Qt4
    Platforms
    Windows

    Cool Re: Simple QT SQL Viewer/Updater... [Partially Solved 1 of 2]

    Ok, so I finally have part of this working, I can now intercept the escape key. I copied over the bool eventFilter(obj,event) from qItemDelegate.cpp for my implementation, then I emit a signal when esc is pressed so that it triggers my app to handle a revert.
    An additional alternative could have been to just return false from the esc key and let the app decide, I think it is a matter of preference?! Either way that portion is working now, I attached the lineEditDelegate relevant code if anyone else is interested. I am still working on getting the "Enter" key to not reset the model after it submits the data... I think it is tied to the
    Qt Code:
    1. QMetaObject::invokeMethod(this, "_q_commitDataAndCloseEditor",
    2. Qt::QueuedConnection, Q_ARG(QWidget*, editor));
    To copy to clipboard, switch view to plain text mode 
    which is called on either a Qt::Key_Return || Qt::Key_Enter... I am still digging into this one...

    If anyone has other thoughts on how to stop the tableModel from resetting when enter is pressed after an edit when the down arrow key works correctly, please let me know,
    Thanks,
    AlphaWolfXV

    lineEditDelegate(cpp for eventFilter...)
    Qt Code:
    1. bool lineEditDelegate::eventFilter(QObject *object, QEvent *event)
    2. {
    3. {
    4. QWidget *editor = qobject_cast<QWidget*>(object);
    5. if (!editor)
    6. return false;
    7. if (event->type() == QEvent::KeyPress) {
    8. switch (static_cast<QKeyEvent *>(event)->key()) {
    9. case Qt::Key_Tab:
    10. emit commitData(editor);
    11. emit closeEditor(editor, QAbstractItemDelegate::EditNextItem);
    12. return true;
    13. case Qt::Key_Backtab:
    14. emit commitData(editor);
    15. emit closeEditor(editor, QAbstractItemDelegate::EditPreviousItem);
    16. return true;
    17. case Qt::Key_Enter:
    18. case Qt::Key_Return:
    19. if (QLineEdit *e = qobject_cast<QLineEdit*>(editor))
    20. if (!e->hasAcceptableInput())
    21. return false;
    22. QMetaObject::invokeMethod(this, "_q_commitDataAndCloseEditor",
    23. Qt::QueuedConnection, Q_ARG(QWidget*, editor));
    24. return false;
    25. case Qt::Key_Escape:
    26. // don't commit data
    27. qDebug()<<"ESCAPE?";
    28. emit sig_ESC_Pressed(); //MY NEW SIGNAL!!!!!
    29. emit closeEditor(editor, QAbstractItemDelegate::RevertModelCache);
    30. break;
    31. default:
    32. return false;
    33. }
    34. if (editor->parentWidget())
    35. editor->parentWidget()->setFocus();
    36. return true;
    37. } else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) {
    38. //the Hide event will take care of he editors that are in fact complete dialogs
    39. if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) {
    40. QWidget *w = QApplication::focusWidget();
    41. while (w) { // don't worry about focus changes internally in the editor
    42. if (w == editor)
    43. return false;
    44. w = w->parentWidget();
    45. }
    46.  
    47. emit commitData(editor);
    48. emit closeEditor(editor, NoHint);
    49. }
    50. } else if (event->type() == QEvent::ShortcutOverride) {
    51. if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape) {
    52. event->accept();
    53. return true;
    54. }
    55. }
    56. return false;
    57. }
    58. }
    To copy to clipboard, switch view to plain text mode 

Similar Threads

  1. Direct3D revisited
    By uj in forum Qt Programming
    Replies: 4
    Last Post: 20th April 2010, 09:21
  2. [SOLVED] QDateTime (revisited)
    By pdoria in forum Qt Programming
    Replies: 1
    Last Post: 31st July 2009, 13:12
  3. Issues writing a simple image viewer class
    By ultim8 in forum Qt Programming
    Replies: 5
    Last Post: 27th March 2009, 14:50
  4. QByteArray revisited
    By pdoria in forum Qt Programming
    Replies: 11
    Last Post: 17th January 2008, 19:09
  5. Drag and drop revisited
    By Big Duck in forum Newbie
    Replies: 2
    Last Post: 30th June 2006, 17:41

Tags for this Thread

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.