Seite 1 von 1
[gelöst] QTableView liefert kein doubleClicked()
Verfasst: 23. November 2010 11:09
von Willi2793
Ich habe eine QTableView mit Modeel und möchte gerne ein Detail-Fenster zu einer Zeile zeigen wenn eine Zeile doppelt geklickt wurde. Dazu habe ich doubleClicked(QModelIndex) connected. Zum Test auch clicked(QModelIndex). clicked wird aufgerufen, doubleClicked aber leider nicht. Müssen dafür Vorkehrungen getroffen werden?
Grüße,
Willi
Verfasst: 23. November 2010 12:21
von upsala
Nein. Code? Fehlermeldungen, oder Meldungen auf der Konsole?
Verfasst: 23. November 2010 12:26
von Willi2793
Fehlermeldungen und Meldungen auf der Konsole Fehlanzeige. Einen Codeschnipsel muss ich erst mal vorbereiten. Ich dachte das eventuell eine Voraussetzung fehlt. Jetzt muß ich ihn halt erst klein machen
Aber schonmal danke für die Antwort.

Re: QTableView liefert kein doubleClicked()
Verfasst: 23. November 2010 17:57
von padreigh
Willi2793 hat geschrieben: Müssen dafür Vorkehrungen getroffen werden?
Doppelt klicken?
SCNR
Eigentlich sollte das gehen. Hast du eventuell EventHandler oder mouseclicked überladen so dass die dir den Doppelklick "stehlen"? Hier geht das Problemlos.
Re: QTableView liefert kein doubleClicked()
Verfasst: 23. November 2010 18:04
von Willi2793
padreigh hat geschrieben:Doppelt klicken?
Der war gut und ich habe ihn verdient
padreigh hat geschrieben:Eigentlich sollte das gehen. Hast du eventuell EventHandler oder mouseclicked überladen so dass die dir den Doppelklick "stehlen"? Hier geht das Problemlos.
Als Ebenthandler habe ich nur den CloseEvent am Window. Und der einfache Click wird ja auch geliefert.
Verfasst: 23. November 2010 22:01
von Willi2793
So, nun habe ich ein kleines Beispiel gemacht bei dem das auch nicht funktioniert. Ich hoffe jemand kann mich erleuchten
main.cpp
Code: Alles auswählen
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
Code: Alles auswählen
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "modelclass.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
ModelClass model;
private slots:
void doubleClicked(QModelIndex);
};
#endif // MAINWINDOW_H
mainwindow.cpp
Code: Alles auswählen
#include <QDebug>
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
model() {
ui->setupUi(this);
ui->tableView->setModel(&model);
connect(ui->tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(doubleClicked(QModelIndex)));
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::doubleClicked(QModelIndex index) {
qDebug() << "Es wurde doppelt geklickt: " << index;
}
mainwindow.ui
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableView" name="tableView"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>18</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
modelclass.h
Code: Alles auswählen
#ifndef MODELCLASS_H
#define MODELCLASS_H
#include <QAbstractTableModel>
#include <QStringList>
class ModelClass : public QAbstractTableModel
{
public:
ModelClass();
virtual ~ModelClass();
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
virtual Qt::ItemFlags flags(const QModelIndex& index) const;
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
virtual bool setData(const QModelIndex& index, const QVariant& value, int role);
private:
QStringList cont;
};
#endif // MODELCLASS_H
modelclass.cpp
Code: Alles auswählen
#include <QAbstractTableModel>
#include <QStringList>
#include "modelclass.h"
ModelClass::ModelClass() :
cont() {
cont.append("Line 1");
cont.append("Line 2");
cont.append("Line 3");
cont.append("Line 4");
cont.append("Line 5");
}
ModelClass::~ModelClass() {
}
QVariant ModelClass::headerData(int section, Qt::Orientation orientation, int role) const {
QVariant xReturn;
switch(orientation) {
case Qt::Vertical:
switch(role) {
case Qt::DisplayRole:
xReturn = QString().setNum(section+1);
break;
default:
break;
}
break;
default:
break;
}
return xReturn;
}
Qt::ItemFlags ModelClass::flags(const QModelIndex& index) const {
return Qt::ItemFlags();
}
int ModelClass::rowCount(const QModelIndex& parent) const {
int cnt = 0;
if (!parent.isValid()) {
cnt = cont.size();
}
return cnt;
}
int ModelClass::columnCount(const QModelIndex& parent) const {
int nCount = 0;
if (!parent.isValid()) {
nCount = 1;
}
return nCount;
}
QVariant ModelClass::data(const QModelIndex& index, int role) const {
QVariant xReturn;
if (index.row() < cont.size()) {
switch(role) {
case Qt::DisplayRole:
case Qt::EditRole:
switch(index.column()) {
case 0:
xReturn = cont.at(index.row());
break;
default:
break;
}
break;
default:
break;
}
}
return xReturn;
}
bool ModelClass::setData(const QModelIndex& index, const QVariant& value, int role) {
return true;
}
Verfasst: 23. November 2010 22:20
von franzf
Das Beispiel ist wegen dem nicht mitgelieferten ui nicht kompilierbar. Für ein Minimalbeispiel tut es auch ein einfaches manuelles QTableView anlegen + als centralWidget setzen.
Dann zum Fehler:
Code: Alles auswählen
Qt::ItemFlags ModelClass::flags(const QModelIndex& index) const {
return Qt::ItemFlags();
}
Lass die Methode einfach weg, wenn du nicht weißt was du damit anfangen sollst. Oder implementier die richtig. Ich hab es auskommentiert und schon bekomm ich Consolenausgaben, die vor der Änderung natürlich NICHT kamen.
Verfasst: 23. November 2010 23:02
von Willi2793
franzf hat geschrieben:Das Beispiel ist wegen dem nicht mitgelieferten ui nicht kompilierbar. Für ein Minimalbeispiel tut es auch ein einfaches manuelles QTableView anlegen + als centralWidget setzen.
Stimmt, sorry. Ich habe es der Vollständigkeit halber nachgetragen.
franzf hat geschrieben:Dann zum Fehler:
Code: Alles auswählen
Qt::ItemFlags ModelClass::flags(const QModelIndex& index) const {
return Qt::ItemFlags();
}
Lass die Methode einfach weg, wenn du nicht weißt was du damit anfangen sollst. Oder implementier die richtig. Ich hab es auskommentiert und schon bekomm ich Consolenausgaben, die vor der Änderung natürlich NICHT kamen.
Danke, das war es wirklich.