Seite 1 von 1

signal vom QTableWidget problem

Verfasst: 3. Juni 2009 00:32
von speedy
Ich verstehe das nicht.

hab folgendes Problem:
Wenn ich eine Zelle auswähle mit der Maus wird ein Signal mit cellPressed(int, int) erzeugt.
Wenn ich aber mit den Pfeiltasten in ein anderes Feld gehe bekomme ich kein Signal.
mit cellActivated hab ichs auch schon probliert.
Da kommt nur beim Doppelklick ein signal.

Was mach ich da denn falsch?

Code: Alles auswählen

void loadsettings::createFilesTable()
 {
     filesTable = new QTableWidget(0, 1);
//     filesTable->setSelectionBehavior(QAbstractItemView::SelectRows);
     filesTable->setSelectionBehavior(QAbstractItemView::SelectItems);

     QStringList labels;
     labels << tr("File Name");
     filesTable->setHorizontalHeaderLabels(labels);
     filesTable->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch);
     filesTable->verticalHeader()->hide();
     filesTable->setShowGrid(false);

     connect(filesTable, SIGNAL(cellClicked(int, int)),
             this, SLOT(openFileOfItem(int, int)));

//     connect(filesTable, SIGNAL(cellPressed(int, int)),
//             this, SLOT(openFileOfItem(int, int)));

 }

Verfasst: 3. Juni 2009 00:35
von speedy
oder muss ich beim füttern der Tabelle da noch Connects einbauen?

sieht momentan so aus

Code: Alles auswählen

void loadsettings::showFiles(const QDir &directory, const QStringList &files)
 {
     for (int i = 0; i < files.size(); ++i) {
         QFile file(directory.absoluteFilePath(files[i]));
         qint64 size = QFileInfo(file).size();

         QTableWidgetItem *fileNameItem = new QTableWidgetItem(files[i]);
         fileNameItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable);
//         QTableWidgetItem *sizeItem = new QTableWidgetItem(tr("%1 KB")
//                                              .arg(int((size + 1023) / 1024)));
//         sizeItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
//         sizeItem->setFlags(sizeItem->flags() ^ Qt::ItemIsEditable);

         int row = filesTable->rowCount();
         filesTable->insertRow(row);
         filesTable->setItem(row, 0, fileNameItem);
//         filesTable->setItem(row, 1, sizeItem);
     }
     filesFoundLabel->setText(tr("%1 file(s) found").arg(files.size()) +
                              (" (Double click on a file to open it)"));
 }

Geb ja zu ... ist ein wenig geklaut aus den Exampels ... will mir das aber für mein Programm noch was umstrukturieren.

Verfasst: 3. Juni 2009 08:26
von solarix
Wenn ich eine Zelle auswähle mit der Maus wird ein Signal mit cellPressed(int, int) erzeugt.
Wenn ich aber mit den Pfeiltasten in ein anderes Feld gehe bekomme ich kein Signal.
[...]
Für unterschiedliche Aktionen gibt es halt auch unterschiedliche Signals.. schau dir nochmals die Liste der möglichen Signals an, welches passt wohl zu deinem Problem?
Kleiner Hinweis: Sowohl bei der Maus wie auch bei den Cursortasten verändert sich der Fokus...

Verfasst: 12. Juni 2009 05:04
von speedy
hmm
irgendwie bin ich bei dem Problem immer noch nicht weiter gekommen...

Verfasst: 12. Juni 2009 05:09
von speedy
arg ...
warum geht das jetzt?
...
connect(filesTable, SIGNAL(currentCellChanged(int, int,int,int)),
this, SLOT(openFileOfItem(int, int)));

aber ist das schlimm wenn mein slot nur 2 int's hat aber das signal 4???

[EDIT]: ich werd wohl grad zu müde um noch klar zu denken ... mein Bett ruft ...