[gelöst] QTableView liefert kein doubleClicked()
[gelöst] QTableView liefert kein doubleClicked()
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
Grüße,
Willi
Zuletzt geändert von Willi2793 am 23. November 2010 23:03, insgesamt 1-mal geändert.
Re: QTableView liefert kein doubleClicked()
Doppelt klicken?Willi2793 hat geschrieben: Müssen dafür Vorkehrungen getroffen werden?
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()
Der war gut und ich habe ihn verdientpadreigh hat geschrieben:Doppelt klicken?
Als Ebenthandler habe ich nur den CloseEvent am Window. Und der einfache Click wird ja auch geliefert.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.
So, nun habe ich ein kleines Beispiel gemacht bei dem das auch nicht funktioniert. Ich hoffe jemand kann mich erleuchten 
main.cpp
mainwindow.h
mainwindow.cpp
mainwindow.ui
modelclass.h
modelclass.cpp
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();
}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_HCode: 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;
}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>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_HCode: 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;
}
Zuletzt geändert von Willi2793 am 23. November 2010 23:00, insgesamt 1-mal geändert.
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:
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.
Dann zum Fehler:
Code: Alles auswählen
Qt::ItemFlags ModelClass::flags(const QModelIndex& index) const {
return Qt::ItemFlags();
}Stimmt, sorry. Ich habe es der Vollständigkeit halber nachgetragen.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.
Danke, das war es wirklich.franzf hat geschrieben:Dann zum Fehler: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.Code: Alles auswählen
Qt::ItemFlags ModelClass::flags(const QModelIndex& index) const { return Qt::ItemFlags(); }