signal vom QTableWidget problem

Alles rund um die Programmierung mit Qt
Antworten
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

signal vom QTableWidget problem

Beitrag 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)));

 }
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

Beitrag 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.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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...
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

Beitrag von speedy »

hmm
irgendwie bin ich bei dem Problem immer noch nicht weiter gekommen...
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

Beitrag 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 ...
Antworten