maybe, subclassing QTableView can achieve what you want.
tableview.h :
#ifndef TABLEVIEW_H
#define TABLEVIEW_H
#include <QTableView>
{
Q_OBJECT
public:
protected:
signals:
void rowSelected(int row_num);
void rowSelected(bool val);
};
#endif // TABLEVIEW_H
#ifndef TABLEVIEW_H
#define TABLEVIEW_H
#include <QTableView>
class TableView : public QTableView
{
Q_OBJECT
public:
TableView(QWidget *parent = 0);
protected:
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
signals:
void rowSelected(int row_num);
void rowSelected(bool val);
};
#endif // TABLEVIEW_H
To copy to clipboard, switch view to plain text mode
tableview.cpp :
#include "tableview.h"
#include <QItemSelection>
#include <QHeaderView>
{
}
{
QTableView::selectionChanged(selected, deselected
);
if(model() != 0)
{
if(selectedIndexes().count() == 0)
{
emit rowSelected(false);
return;
}
int count = 0;
int row = selectedIndexes().at(0).row();
if(m.row() == row)
count++;
else
return;
}
if(count == horizontalHeader()->count())
{
emit rowSelected(true);
emit rowSelected(row);
}
else
{
emit rowSelected(false);
}
}
}
#include "tableview.h"
#include <QItemSelection>
#include <QHeaderView>
TableView::TableView(QWidget *parent) : QTableView(parent)
{
}
void TableView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
QTableView::selectionChanged(selected, deselected);
if(model() != 0)
{
if(selectedIndexes().count() == 0)
{
emit rowSelected(false);
return;
}
int count = 0;
int row = selectedIndexes().at(0).row();
foreach(QModelIndex m, selectedIndexes()) {
if(m.row() == row)
count++;
else
return;
}
if(count == horizontalHeader()->count())
{
emit rowSelected(true);
emit rowSelected(row);
}
else
{
emit rowSelected(false);
}
}
}
To copy to clipboard, switch view to plain text mode
main.cpp :
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QFileSystemModel>
#include "tableview.h"
int main(int argc, char *argv[])
{
button->setEnabled(false);
TableView *v = new TableView;
QFileSystemModel model;
model.setRootPath("C:/");
v->setModel(&model);
lay->addWidget(v);
lay->addWidget(button);
QObject::connect(v,
SIGNAL(rowSelected
(bool)), button,
SLOT(setEnabled
(bool)));
w.show();
return app.exec();
}
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QFileSystemModel>
#include "tableview.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget w;
QVBoxLayout *lay = new QVBoxLayout(&w);
QPushButton *button = new QPushButton("Go");
button->setEnabled(false);
TableView *v = new TableView;
QFileSystemModel model;
model.setRootPath("C:/");
v->setModel(&model);
lay->addWidget(v);
lay->addWidget(button);
QObject::connect(v, SIGNAL(rowSelected(bool)), button, SLOT(setEnabled(bool)));
w.show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks