Difference between revisions of "Qt/ModelView/AbstractTableModelCheckable"

From ProgrammingExamples
< Qt
Jump to: navigation, search
(Created page with '==main.cpp== <source lang="cpp"> #include <QApplication> #include "form.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Form form; form.show(); ret…')
 
(No difference)

Revision as of 09:16, 29 December 2011

main.cpp

#include <QApplication>
 
#include "form.h"
 
int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  Form form;
 
  form.show();
  return app.exec();
}

MyTableModel.h

#ifndef MyTableModel_H
#define MyTableModel_H
 
#include <QAbstractTableModel>
 
#include <vector>
 
class MyTableModel : public QAbstractTableModel
{
public:
  MyTableModel();
 
  int rowCount(const QModelIndex& parent) const;
  int columnCount(const QModelIndex& parent) const;
  QVariant data(const QModelIndex& index, int role) const;
  QVariant headerData(int section, Qt::Orientation orientation, int role) const;
  Qt::ItemFlags flags(const QModelIndex& index) const;
  bool setData(const QModelIndex & index, const QVariant & value, int role);
 
  // Custom
  void ChangeData();
 
protected:
  std::vector<std::vector<float> > Columns;
};
 
#endif

MyTableModel.cpp

#include "MyTableModel.h"
 
#include <sstream>
 
MyTableModel::MyTableModel() : QAbstractTableModel()
{
  std::vector<float> column1;
  column1.push_back(10);
  column1.push_back(20);
  column1.push_back(30);
  column1.push_back(40);
 
  Columns.push_back(column1);
 
  std::vector<float> column2;
  column2.push_back(50);
  column2.push_back(60);
  column2.push_back(70);
  column2.push_back(80);
 
  Columns.push_back(column2);
}
 
 
 
int MyTableModel::rowCount(const QModelIndex& parent) const
{
  return Columns[0].size();
}
 
int MyTableModel::columnCount(const QModelIndex& parent) const
{
  return Columns.size();
}
 
QVariant MyTableModel::data(const QModelIndex& index, int role) const
{
  if(role == Qt::DisplayRole)
    {
    return Columns[index.column()][index.row()];
    }
  return QVariant::Invalid;
}
 
QVariant MyTableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
 
  if(role == Qt::DisplayRole)
    {
    std::stringstream ss;
    if(orientation == Qt::Horizontal)
      {
      ss << "H_" << section;
      return QString(ss.str().c_str());
      }
    else if(orientation == Qt::Vertical)
      {
      ss << "V_" << section;
      return QString(ss.str().c_str());
      }
 
    }
 
  return QVariant::Invalid;
}
 
 
bool MyTableModel::setData(const QModelIndex & index, const QVariant & value, int role)
{
 
}
 
Qt::ItemFlags MyTableModel::flags(const QModelIndex& index) const
{
  Qt::ItemFlags returnFlags = QAbstractTableModel::flags(index);
 
  if (index.column()==1)
  {
    returnFlags |= Qt::ItemIsUserCheckable;
  }
 
  return returnFlags;
}
 
void MyTableModel::ChangeData()
{
  for(unsigned int i = 0; i < this->Columns[0].size(); ++i)
    {
    this->Columns[0][i]++;
    this->Columns[1][i]+=2;
    }
 
  beginResetModel();
  endResetModel();
}

form.h

#ifndef FORM_H
#define FORM_H
 
#include "ui_form.h"
 
#include "MyTableModel.h"
 
class Form : public QWidget, public Ui::Form
{
    Q_OBJECT
 
public:
    Form(QWidget *parent = 0);
 
  public slots:
    void on_btnUpdate_clicked();
 
protected:
  MyTableModel* model;
};
 
#endif

form.cpp

#include <QAbstractTableModel>
#include <QtGui>
 
#include <iostream>
#include <sstream>
 
#include "form.h"
 
Form::Form(QWidget *parent) : QWidget(parent)
{
  setupUi(this);
 
  this->model = new MyTableModel;
  this->tableView->setModel(model);
 
  this->tableView->resizeColumnsToContents();
 
}
 
void Form::on_btnUpdate_clicked()
{
  this->model->ChangeData();
  //this->model->ChangeData();
}

form.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QGridLayout" name="gridLayout">
   <item row="0" column="0">
    <widget class="QTableView" name="tableView">
     <attribute name="horizontalHeaderStretchLastSection">
      <bool>true</bool>
     </attribute>
    </widget>
   </item>
   <item row="1" column="0">
    <widget class="QPushButton" name="btnUpdate">
     <property name="text">
      <string>Update</string>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
 
PROJECT(AbstractTableModelCheckable)
 
FIND_PACKAGE(Qt4 REQUIRED)
INCLUDE(${QT_USE_FILE})
 
QT4_WRAP_UI(UISrcs form.ui)
QT4_WRAP_CPP(MOCSrcs form.h)
 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
 
ADD_EXECUTABLE(AbstractTableModelCheckable main.cpp MyTableModel.cpp form.cpp ${MOCSrcs} ${UISrcs})
TARGET_LINK_LIBRARIES(AbstractTableModelCheckable ${QT_LIBRARIES})