Seite 1 von 1

QTable probleme... (Scrollen und Cell Darst.)

Verfasst: 27. Mai 2009 13:37
von Thomas Lehmann
Hi!

Ich teste gerade Qt 4.4.3. (unter Windows mit Visual Studio 2008)
In einem Widget stelle ich eine QTable dar mit einem einfachem table model (siehe später). Probleme habe ich folgende zwei (vertikales scrollen):

a) Der Scrollbalken reagiert nicht richtig. Wenn ich mit der Maus versuche nach unten zu scrollen scrollt er - genau kann ich es nicht sagen - aber entweder macht er es je Item oder je Seite. Ich will aber einfach schnell in die Mitte ziehen - geht nicht!

b) Ich kann den Scrollbalken nicht nach oben ziehen um nach oben zu scrollen. Er scrollt trotzdem nach unten.

Das zweite Problem. Jede Zelle stelle so eine Box dar die wohl eine Checkbox sein soll. Meine Table is readonly und ich hab über den Typ der Zellen auch nichts gesagt. In den Beispielen der Dokumentation erscheinen die nicht. Was mach ich falsch (Checkbox soll weg)?

Also:

Code: Alles auswählen

class NewTableModel : public QAbstractTableModel
{
    public:
        int rowCount(const QModelIndex & parent = QModelIndex()) const
            { return 1000; }
        int columnCount(const QModelIndex & parent = QModelIndex()) const
            { return 5; }
        QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const
        {
            std::stringstream stream;
            stream << "row="   << index.row()
                   << ", col=" << index.column();
            return QVariant(QString(stream.str().c_str()));
        }
};//class NewTableModel
Und das Widget aussen herum:

Code: Alles auswählen

NewMatrix::NewMatrix(QWidget* widget)
    : QWidget(widget)
    , _tableModel(new NewTableModel)
    , _table(new QTableView(this))
{
    _table->setModel(_tableModel);
    _table->setAlternatingRowColors(true);
     _table->setSelectionMode(QAbstractItemView::SelectionMode::NoSelection);
    
    QBoxLayout* layout = new QBoxLayout(QBoxLayout::TopToBottom);
    layout->addWidget(_table);
    setLayout(layout);
}//NewMatrix

Verfasst: 27. Mai 2009 16:47
von upsala
Was gibst du bei flags() zurück und du kannst nicht für alle 'roles' den gleichen Wert zurückgeben, wenn du mit einer role nichts anfangen kannst, da gibt einen leeren QVariant zurück.

Verfasst: 27. Mai 2009 16:56
von Thomas Lehmann
Ok, ich habe nun in der Methode data folgendes eingefügt:

Code: Alles auswählen

            if (role != Qt::DisplayRole)
                return QVariant();
Nun sind diese Checkboxen weg. Super. Danke!
Die Flags hab ich nicht überschrieben.

Kann man mir nun auch noch beim Thema Scrollen helfen? Ich halte die Maus auf dem Slider geklickt kann ihn aber nicht in die Mitte des Scrollbalken ziehen. Ich muss warten, bis die Tabelle zu meiner Maus position hingescrollt ist. Außerdem kann ich die Tabelle über den Slider nicht wieder zurückscrollen (außer mit dem rechte Maustaste Menü).

Ach ja und das gilt horizontal wie auch vertikal!

Verfasst: 28. Mai 2009 11:24
von Thomas Lehmann
Auf einer Unix Machine mit Qt 4.3.1 hat alles funktioniert. Also sieht es danach aus, als ob:

a) Ein Fehler in einer neueren Version hereingekommen ist, oder ...
b) Der Fehler evtl. nur auf Windows auftritt.

Kann jemand etwas dazu sagen?