Creating a table editor

  • Dear Qt programmers and developers,

    I'm creating (as some of you already noticed ;-) ) a table editing application. Everything went almost perfect up to this moment. You guys helped me a lot along the way but I guess I need to bother you some more. I'm starting to think that what I'm trying to do is not possible with choices I've made. I'd like to ask for a piece of advice.

    My editor should be capable of:

    • Managing table size (row and column count along with their heights and widths),
    • Allowing removing and adding of rows/columns,
    • Allowing cell spanning,
    • Changing font properties (bold, italics, underline, color, etc.),
    • Changing background color,
      /* Everything works up to this point */
    • Changing border style <- this is the point I got stuck at.

    I'm inheriting QTableWidget class to do the stuff I mentioned above. It seems though, that I cannot use it to modify the borders of the table. I know I can hide/show the grid - but that works for the whole grid, not parts of it. I can use styles to modify the looks of a single cell but then it's going to have an "internal" border along with the grid (which will look awful). I would actually like to paint the grid itself the way I want it to be painted (i.e. only a border around the whole table and no borders inside).

    My whole concept is being ruined now. I've put a lot of work in this project and now it seems I'm in a dead end. I'm not really a professional programmer so it really takes some time to program and learn Qt framework (which, as a side note, is really great).

    My question is: should I inherit from QAbstractItemView class and create my own table view class which painting I can adapt to my own needs? Or maybe there is an elegant way of using QTableWidget to actually modify the grid?

    Your help is greatly appreciated.


  • If I wew you, I would first try to read QTableView:paintEvent() implementation, which will give you quite lots of hint

  • Umm... if I guessed your hint correctly - here it is:
    @option.rect = QRect(colp + (showGrid && rightToLeft ? 1 : 0), rowY, colw, rowh);@
    What it means is that if I will not paint the grid then all the cells will be closer together. Is that what you were suggesting?

    Edit: not really... still playing around with it.

    Edit #2: I managed to paint my own grid for the table. Now I need to solve some issues when painting cells. When I call the default paint() method of QStyledItemDelegate the QStyleOptionViewItem contains invalid coordinates. Take a look at the image:
    ! selection)!
    As you can see the selection is being painted not exactly where it should. But I guess I'm going to manage fixing that. If not, I'll post here again.

Log in to reply