qt 一个简单的表格程序
来源:互联网 发布:淘宝app 私人定制 编辑:程序博客网 时间:2024/05/16 12:31
#-------------------------------------------------## Project created by QtCreator 2017-01-10T10:36:15##-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = readonlyTEMPLATE = appSOURCES += main.cpp\ mymodel.cppHEADERS += mymodel.hFORMS += mymodel.ui
#ifndef MYMODEL_H#define MYMODEL_H// mymodel.h#include <QAbstractTableModel>class MyModel : public QAbstractTableModel{ Q_OBJECTpublic: MyModel(QObject *parent); int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;};#endif // MYMODEL_H
// mymodel.cpp#include "mymodel.h"MyModel::MyModel(QObject *parent){}int MyModel::rowCount(const QModelIndex &parent) const{ return 2;}int MyModel::columnCount(const QModelIndex &parent) const{ return 3;}QVariant MyModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { return QString("Row%1, Column%2") .arg(index.row() + 1) .arg(index.column() + 1); } return QVariant();}
#include "mymodel.h"#include <QApplication>#include <QTableView>int main(int argc, char *argv[]){ QApplication a(argc, argv); QTableView tableView; MyModel myModel(0); tableView.setModel(&myModel); tableView.show(); return a.exec();}
有些虚函数需要继承QAbstractTableModel,
// 设置行数
int rowCount(const QModelIndex &parent) const;
// 设置列数
int columnCount(const QModelIndex &parent) const;
// 显示表格数据
QVariant data(const QModelIndex &index, int role) const;
// 设置表格数据
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
// 设置表格头
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
// 设置表格格式,比如是否可编辑
Qt::ItemFlags flags(const QModelIndex &index) const;
对应的都需要实现,可以设置私有变量m_gridData用于保存数据。
树型布局代码示例:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { treeView = new QTreeView(this); setCentralWidget(treeView); standardModel = new QStandardItemModel; QList<QStandardItem *> preparedRow = prepareRow("first", "second", "third"); QStandardItem *item = standardModel->invisibleRootItem(); // adding a row to the invisible root item produces a root element item->appendRow(preparedRow); QList<QStandardItem *> secondRow =prepareRow("111", "222", "333"); // adding a row to an item starts a subtree preparedRow.first()->appendRow(secondRow); treeView->setModel(standardModel); treeView->expandAll();}QList<QStandardItem *> MainWindow::prepareRow(const QString &first, const QString &second, const QString &third){ QList<QStandardItem *> rowItems; rowItems << new QStandardItem(first); rowItems << new QStandardItem(second); rowItems << new QStandardItem(third); return rowItems;}行头以"first", "second", "third"开头,以 ”111“, ”222“, ”333“结尾。
利用selectionMode改变窗口显示
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QTreeView>#include <QStandardItemModel>class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent = 0); ~MainWindow();public slots: void selectionChangedSlot(const QItemSelection & /*newSelection*/, const QItemSelection & /*oldSelection*/);private: QTreeView *treeView; QStandardItemModel *standardModel;};#endif // MAINWINDOW_H
#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ treeView = new QTreeView(this); setCentralWidget(treeView); standardModel = new QStandardItemModel; QStandardItem *rootNode = standardModel->invisibleRootItem(); // defining a couple of items QStandardItem *americalItem = new QStandardItem("America"); QStandardItem *canadaItem = new QStandardItem("Canada"); QStandardItem *usaItem = new QStandardItem("USA"); QStandardItem *bostonItem = new QStandardItem("Boston"); QStandardItem *europeItem = new QStandardItem("Europe"); QStandardItem *italyItem = new QStandardItem("Italy"); QStandardItem *romeItem = new QStandardItem("Rome"); QStandardItem *veronaItem = new QStandardItem("verona"); // building up the hierarchy rootNode->appendRow(americalItem); rootNode->appendRow(europeItem); americalItem->appendRow(canadaItem); americalItem->appendRow(usaItem); usaItem->appendRow(bostonItem); europeItem->appendRow(italyItem); italyItem->appendRow(romeItem); italyItem->appendRow(veronaItem); // register the model treeView->setModel(standardModel); treeView->expandAll(); // selection changes shall triger a slot QItemSelectionModel *selectionModel = treeView->selectionModel(); connect(selectionModel, SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(selectionChangedSlot(const QItemSelection &, const QItemSelection &)));}MainWindow::~MainWindow(){}void MainWindow::selectionChangedSlot(const QItemSelection &, const QItemSelection &){ // get the text of the selected item const QModelIndex index = treeView->selectionModel()->currentIndex(); QString selectedText = index.data(Qt::DisplayRole).toString(); // find out the hierarchy level of the selected item int hierarchyLevel = 1; QModelIndex seekRoot = index; while (seekRoot.parent() != QModelIndex()) { seekRoot = seekRoot.parent(); hierarchyLevel++; } QString showString = QString("%1, Level %2").arg(selectedText) .arg(hierarchyLevel); setWindowTitle(showString);}
0 0
- qt 一个简单的表格程序
- 一个简单的 Qt GUI 程序
- 一个简单的Qt socket 程序
- 一个简单的表格
- qt-opengl 初学的一个简单的程序
- 一个简单的Css表格
- 一个简单的dgrid表格
- 一个简单的表格制作
- html一个简单的表格
- Qt入门-构建一个简单的窗体程序
- QT入门-一个简单的计算器程序
- Qt Quick学习---------------构建一个简单的qml程序
- 用Qt Creator编写一个简单的窗口程序
- 04 QT实现一个简单的看图程序
- Qt Quick学习---------------构建一个简单的qml程序
- C++/Qt中一个简单的加密解密程序
- QT操作WPS表格的简单实现
- 利用QT编写一个简单爬虫程序
- request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
- PHP实现即时输出、实时输出内容方法
- 启动DELPHI2007出现 EditorLineEnds.ttr 错误的解决方法
- c++流类库与输入输出
- nodejs服务后台执行(forever)
- qt 一个简单的表格程序
- android UiAutomator用switch语句随机设置的方法
- 我们为什么要把Dagger2,MVP以及Rxjava引入项目中?
- 28 Python 单元测试和unittest模块
- serialVersionUID的作用
- PHPstorm 将背景更换成图片
- Cloudera-scm-agent dead but pid file exist
- Docker之常用命令
- 运维路上的FAQ