Results 1 to 5 of 5

Thread: QTableWidgetItem no text

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    May 2010
    Location
    Somewhere in Southern Germany
    Posts
    8
    Thanks
    3
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default QTableWidgetItem no text

    I've been trying for several hours now to get some QTableWidgetItems to display.
    I have five QTableWidgets which I use to display highscores on a per-age basis.
    Unfortunately my QTableWidgetItems seem to be added to the QTableWidget (as you can see from the line numbers displayed in the screenshot) yet I never get the text of the QTableWidgetItem to display (in the displayBestPerAge() section)
    The Query to the database works fine. Even if I use simple QStrings in the new QTableWidgetItem() I still see nothing displayed.
    Slowly running out of ideas. Does anyone have an idea what I might be doing wrong?

    Qt Code:
    1. HighScore::HighScore(QWidget *parent) :
    2. QWidget(parent),
    3. ui(new Ui::HighScore)
    4. {
    5. ui->setupUi(this);
    6. ageTbl=new QList<QTableWidget *>;
    7. ageTbl->append(ui->tblAge6);
    8. ageTbl->append(ui->tblAge7);
    9. ageTbl->append(ui->tblAge8);
    10. ageTbl->append(ui->tblAge9);
    11. ageTbl->append(ui->tblAge10);
    12.  
    13. displayBestPerAge();
    14. }
    15.  
    16.  
    17. void HighScore::displayBestPerAge()
    18. {
    19.  
    20. QSqlQuery query;
    21. QString queryString;
    22. QString formatString;
    23. QList<int> alreadyDisplayed;
    24. int rowCnt=0;
    25. for (int i=6;i<11;i++) {
    26. rowCnt=0;
    27. int index=i-6;
    28. alreadyDisplayed.clear();
    29. queryString=QString("select startaufstellung.startNo,teilnehmer.tlnVorname, teilnehmer.tlnName,rundenzeiten.rundenzeit,teilnehmer.tlnID from rundenzeiten, \
    30. teilnehmer,startaufstellung where rundenzeiten.tlnID=teilnehmer.tlnID AND startaufstellung.tlnID=teilnehmer.tlnID AND teilnehmer.tlnAlter='%1' \
    31. order by rundenzeiten.runde, rundenzeiten.rundenzeit ").arg(i);
    32. query.exec(queryString);
    33.  
    34. int platz=1;
    35.  
    36. while (query.next()) {
    37.  
    38.  
    39.  
    40. QString startNummer= query.value(0).toString() ;
    41. QString vorName=query.value(1).toString() ;
    42. QString name=query.value(2).toString() ;
    43. QString zeit= ms2dispVal(query.value(3).toInt());
    44. int id=query.value(4).toInt();
    45. qDebug()<<"Checking ID" << id;
    46. if (!alreadyDisplayed.contains(id)) {
    47. alreadyDisplayed.append(id);
    48. platz++;
    49. //retrieve last Row and add another to end of table
    50. int row=ageTbl->at(index)->rowCount();
    51. qDebug() << "Row: " <<row;
    52. ageTbl->at(index)->insertRow(row);
    53. //
    54. QTableWidgetItem *platzItem=new QTableWidgetItem(QString::number(platz));
    55. qDebug() << "Platz " << QString::number(platz);
    56. ageTbl->at(index)->setItem(row,0,platzItem);
    57. //
    58. QTableWidgetItem *nameItem=new QTableWidgetItem(QString(vorName % " " % name));
    59.  
    60. qDebug() << "Name: " << vorName % " " % name;
    61. ageTbl->at(index)->setItem(row,1,nameItem);
    62. //
    63. QTableWidgetItem *startNoItem=new QTableWidgetItem(startNummer);
    64. ageTbl->at(index)->setItem(row,2,startNoItem);
    65. //
    66. QTableWidgetItem *zeitItem=new QTableWidgetItem(zeit);
    67. ageTbl->at(index)->setItem(row,3,zeitItem);
    68.  
    69. } else {
    70. qDebug() << "ID " << id << "Already stored";
    71. }
    72. }
    73. }
    74.  
    75. }
    To copy to clipboard, switch view to plain text mode 
    Bildschirmfoto-Form.jpg

  2. #2
    Join Date
    Mar 2011
    Location
    Hyderabad, India
    Posts
    1,882
    Thanks
    3
    Thanked 452 Times in 435 Posts
    Qt products
    Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows
    Wiki edits
    15

    Default Re: QTableWidgetItem no text

    I guess you are not setting the column count for tables, you have do set a column count before setting the items.

    Qt Code:
    1. ...
    2. ui->tblAge6->setColumnCount(3);
    3. ...
    To copy to clipboard, switch view to plain text mode 

  3. The following user says thank you to Santosh Reddy for this useful post:

    Aslan (6th June 2011)

  4. #3
    Join Date
    May 2010
    Location
    Somewhere in Southern Germany
    Posts
    8
    Thanks
    3
    Qt products
    Qt4
    Platforms
    Unix/X11

    Thumbs up Re: QTableWidgetItem no text

    Thank you very much! That was the missing point. Works fine now.
    You saved my day!

  5. #4
    Join Date
    Jun 2011
    Posts
    3
    Thanks
    1
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: QTableWidgetItem no text

    Hi,

    I just started using QT a few days ago and I have the same problem. I can't get the QTableWidget to display data (items). Although it does display the right amount of cells.

    Unfortunately setting the column count didn't help in my case.
    Any other ideas.. Please?

    Thank you,
    Filip

    The code I am using:

    table.pro
    Qt Code:
    1. QT += core gui
    2.  
    3. TARGET = table
    4. TEMPLATE = app
    5.  
    6.  
    7. SOURCES += main.cpp\
    8. mainwindow.cpp
    9.  
    10. HEADERS += mainwindow.h
    11.  
    12. FORMS +=
    To copy to clipboard, switch view to plain text mode 

    mainwindow.h
    Qt Code:
    1. #ifndef MAINWINDOW_H
    2. #define MAINWINDOW_H
    3.  
    4. #include <QMainWindow>
    5. #include <QtGui>
    6. #include <QFile>
    7. #include <QColor>
    8. namespace Ui {
    9. class MainWindow;
    10. }
    11.  
    12. class MainWindow : public QMainWindow
    13. {
    14. Q_OBJECT
    15.  
    16. public:
    17. explicit MainWindow(QWidget *parent = 0);
    18. ~MainWindow();
    19. QTableWidget * dataTableWidget;
    20.  
    21. private:
    22. Ui::MainWindow *ui;
    23. };
    24.  
    25. #endif // MAINWINDOW_H
    To copy to clipboard, switch view to plain text mode 

    main.cpp
    Qt Code:
    1. #include <QtGui/QApplication>
    2. #include "mainwindow.h"
    3.  
    4. int main(int argc, char *argv[])
    5. {
    6. QApplication a(argc, argv);
    7. MainWindow w;
    8. w.resize(800,500);
    9. w.show();
    10.  
    11.  
    12.  
    13. return a.exec();
    14. }
    To copy to clipboard, switch view to plain text mode 

    mainwindow.cpp
    Qt Code:
    1. #include "mainwindow.h"
    2. #include "ui_mainwindow.h"
    3.  
    4. MainWindow::MainWindow(QWidget *parent) :
    5. QMainWindow(parent),
    6. ui(new Ui::MainWindow)
    7. {
    8. ui->setupUi(this);
    9.  
    10. dataTableWidget = new QTableWidget(this);
    11.  
    12. dataTableWidget->resize(243,250);
    13. dataTableWidget->move(25,180);
    14. dataTableWidget->setColumnCount(2);
    15. QStringList headers;
    16. headers << "Velocity" << "Time";
    17. dataTableWidget->setHorizontalHeaderLabels(headers);
    18. dataTableWidget->show();
    19. QString path = "/home/filip/Documents/TestScript.csv";
    20. QFile file(path);
    21. if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    22. {
    23.  
    24. }
    25.  
    26.  
    27. QTextStream in(&file);
    28. while (!in.atEnd())
    29. {
    30. dataTableWidget->insertRow(dataTableWidget->rowCount());
    31. qDebug()<<"rowNumber = " << dataTableWidget->rowCount();
    32.  
    33. QString line = in.readLine();
    34.  
    35. int commaIndex = line.indexOf(",");
    36.  
    37. QString velString = line.left(commaIndex);
    38. qDebug()<< "accString = " << velString;
    39.  
    40. QString timeString = line.mid(commaIndex+1);
    41. qDebug()<< "timeString = " << timeString;
    42.  
    43. newVelItem->setText(velString);
    44. newVelItem->setTextColor("black");
    45. dataTableWidget->setItem(dataTableWidget->rowCount(),1,newVelItem);
    46. qDebug()<< "newVelItem = " << newVelItem->text();
    47.  
    48. QTableWidgetItem *newTimeItem = new QTableWidgetItem;
    49. newTimeItem->setText(timeString);
    50. newTimeItem->setTextColor("black");
    51. dataTableWidget->setItem(dataTableWidget->rowCount(),2,newTimeItem);
    52. qDebug()<< "newTimeItem = " << newTimeItem->text();
    53. }
    54. dataTableWidget->update();
    55. }
    56.  
    57. MainWindow::~MainWindow()
    58. {
    59. delete ui;
    60. }
    To copy to clipboard, switch view to plain text mode 

    The csv file I am parsing (TestScript.csv)
    0,0
    0.5,1
    1,2
    1.5,3
    2,4
    2.5,5
    3,6
    3,7
    3,8
    3,9
    3,10
    3,11
    3,12
    3,13
    3,14
    3,15
    3,16
    3,17
    3,18
    3,19
    3,20
    3,21
    3,22
    3,23
    3,24
    3,25
    3,26
    3,27
    3,28
    3,29
    3,30

  6. #5
    Join Date
    Mar 2011
    Location
    Hyderabad, India
    Posts
    1,882
    Thanks
    3
    Thanked 452 Times in 435 Posts
    Qt products
    Qt4 Qt5
    Platforms
    MacOS X Unix/X11 Windows
    Wiki edits
    15

    Default Re: QTableWidgetItem no text

    Hi FH

    You have two problems in you code

    1. You are inserting a new row in the table, this is ok, but you are setting the new items on the new row (which does not exists). You use dataTableWidget->rowCount() to insert row, and also to set items, dataTableWidget->rowCount() will give the latest row count, when you insert the a row, this will increase, which is the problem in your case.

    2. You are setting the column count as 2, your column numbers are 0 & 1 (not 1 & 2), so you need to set item on column 0 and column 1

    These will solve you Table problem. Below is modified code for your reference. I have added few more comments inline which will help you improve you code.


    Qt Code:
    1. MainWindow::MainWindow(QWidget *parent) :
    2. QMainWindow(parent),
    3. ui(new Ui::MainWindow)
    4. {
    5. ui->setupUi(this);
    6.  
    7. dataTableWidget = new QTableWidget(this);
    8.  
    9. //dataTableWidget->resize(243,250); //Not Required, if setCentralWidget(dataTableWidget);
    10. //dataTableWidget->move(25,180); //Not Required, if using setCentralWidget(dataTableWidget);
    11. dataTableWidget->setColumnCount(2);
    12. QStringList headers;
    13. headers << "Velocity" << "Time";
    14. dataTableWidget->setHorizontalHeaderLabels(headers);
    15. dataTableWidget->show(); //Remove, setCentralWidget(dataTableWidget);
    16. QString path = "C:/Data/TestScript.csv";
    17. QFile file(path);
    18.  
    19. if (file.open(QIODevice::ReadOnly | QIODevice::Text)) //Modified
    20. {
    21. QTextStream in(&file);
    22. while (!in.atEnd())
    23. {
    24. int row = dataTableWidget->rowCount(); //Added
    25. dataTableWidget->insertRow(row); //Added, Insert a row, and set the items on same row
    26. qDebug()<<"rowNumber = " << row;
    27.  
    28. QString line = in.readLine();
    29.  
    30. int commaIndex = line.indexOf(",");
    31.  
    32. QString velString = line.left(commaIndex);
    33. qDebug()<< "accString = " << velString;
    34.  
    35. QString timeString = line.mid(commaIndex+1);
    36. qDebug()<< "timeString = " << timeString;
    37.  
    38. newVelItem->setText(velString);
    39. newVelItem->setTextColor("black");
    40. dataTableWidget->setItem(row, 0, newVelItem); //Modified, Column 0
    41. qDebug()<< "newVelItem = " << newVelItem->text();
    42.  
    43. QTableWidgetItem *newTimeItem = new QTableWidgetItem;
    44. newTimeItem->setText(timeString);
    45. newTimeItem->setTextColor("black");
    46. dataTableWidget->setItem(row, 1, newTimeItem); //Modified, Column 1
    47. qDebug()<< "newTimeItem = " << newTimeItem->text();
    48. }
    49. //dataTableWidget->update(); //Not Required, as it will be updated when show() is called on MainWindow
    50. file.close(); //Added, just to close the open file
    51. }
    52.  
    53. setCentralWidget(dataTableWidget); //Added, this does the layout magic
    54. }
    To copy to clipboard, switch view to plain text mode 

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

    F. H. Saad (15th June 2011)

Similar Threads

  1. Extracting text from QTableWidgetItem
    By bizmopeen in forum Newbie
    Replies: 3
    Last Post: 1st September 2009, 18:28
  2. QTableWidgetItem Text Editing
    By ToddAtWSU in forum Qt Programming
    Replies: 2
    Last Post: 17th March 2009, 03:23
  3. Rich Text in QTableWidgetItem
    By joshuajcarson in forum Qt Programming
    Replies: 9
    Last Post: 2nd September 2008, 16:49
  4. QTableWidgetItem Text
    By pytro in forum Qt Programming
    Replies: 2
    Last Post: 6th August 2007, 22:44
  5. Auto text select in QTableWidgetItem
    By tstankey in forum Newbie
    Replies: 2
    Last Post: 5th October 2006, 21:40

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.