一步步学Qt,第五天-Qt这样的小小差异你发现了多少
来源:互联网 发布:数据库开发岗位认识 编辑:程序博客网 时间:2024/04/28 06:24
一步步学Qt,第5天-Qt这样的小小差异你发现了多少
今天下了一个小小得程序,一个小小的文件目录浏览器。在看到这个地方的时候,看到了Qt你们的Model/View模式,原本小弟疑问这个玩意没有什么模式,自己借用其他的设计模式应该可以的。没想到Qt自己有自己的一套模式。不多说看程序:
#include <QDirModel>#include <QTreeView>#include <QTableView>#include <QListView>#include <QApplication>#include <QSplitter>#include <QAbstractItemModel>#include <QAbstractItemView>int main(int argc,char *argv[]){ QApplication a(argc,argv); QDirModel model; QListView list; QTreeView tree; QTableView table; tree.setModel(&model); list.setModel(&model); table.setModel(&model); tree.setSelectionMode(QAbstractItemView::MultiSelection); list.setSelectionMode(tree.selectionMode()); table.setSelectionMode(tree.selectionMode()); QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&list, SLOT(setRootIndex(QModelIndex))); QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&table, SLOT(setRootIndex(QModelIndex))); QSplitter *splitter = new QSplitter; splitter->addWidget(&tree); splitter->addWidget(&list); splitter->addWidget(&table); splitter->setWindowTitle(QObject::tr("Model/View")); splitter->show(); return a.exec();}
运行效果:
注意下面的代码:
tree.setSelectionMode(QAbstractItemView::MultiSelection); list.setSelectionMode(tree.selectionMode()); table.setSelectionMode(tree.selectionMode());
我在Linux窗口程序设计-Qt4精彩实例上面看到的是
tree.setSelectionModel(QAbstractItemView::MultiSelection); list.setSelectionModel(tree.selectionMode()); table.setSelectionModel(tree.selectionMode());
错误提示如下:
../FileDirectoryView/main.cpp: In function 'int qMain(int, char**)':
../FileDirectoryView/main.cpp:23: error: no matching function for call to 'QListView::setSelectionModel(QAbstractItemView::SelectionMode)'
d:/StudyAppsInstall/QtSDK/Desktop/Qt/4.7.3/mingw/include/QtGui/qabstractitemview.h:132: note: candidates are: virtual void QAbstractItemView::setSelectionModel(QItemSelectionModel*)
../FileDirectoryView/main.cpp:24: error: no matching function for call to 'QTableView::setSelectionModel(QAbstractItemView::SelectionMode)'
d:/StudyAppsInstall/QtSDK/Desktop/Qt/4.7.3/mingw/include/QtGui/qtableview.h:73: note: candidates are: virtual void QTableView::setSelectionModel(QItemSelectionModel*)
可以看出是因为类型不匹配问题:no matching function for call to 'QTableView::setSelectionModel(QAbstractItemView::SelectionMode)'
查看qt的帮助文档:
首先查看QTreeView的setSelectionModel方法
void QTreeView::setSelectionModel ( QItemSelectionModel *selectionModel ) [virtual]
Reimplemented from QAbstractItemView::setSelectionModel().
看到是重新实现了 QAbstractItemView::setSelectionModel().那么查看QAbstractItemView的setSelectionModel方法在
QAbstractItemView Class Reference
中查看setSelectionModel方法:voidsetSelectionMode ( QAbstractItemView::SelectionModemode )virtual voidsetSelectionModel ( QItemSelectionModel * selectionModel )发现使用setSelectionModel就是不对的,因为此处需要的是QAbstractItemView的模式。所以正确的应该使用setSelectionMode方法。出书的人啊,不可以误导人的哦。
- 一步步学Qt,第五天-Qt这样的小小差异你发现了多少
- 一步步学Qt,第五天-小小的ClippingDemo
- 一步步学Qt,第五天-Qt程序发布问题 解决
- 一步步学Qt,第五天-Qt学习小结-Qt工作机制
- 一步步学Qt,第一天
- 一步步学Qt,第四天-Qt 建立MainWindow的小小bug处理
- 一步步学Qt,第三天-Qt动态调用机制
- 一步步学Qt,第四天-Qt 建立MainWindow的步骤
- 一步步学Qt,第三天-工具选择及其配置
- 一步步学Qt,第七天-QPainter绘图QRect定位问题
- 一步步学Qt,第七天-QPainter绘图QRect定位问题
- 一步步学Qt,第二天
- 一步步学Qt,第六天-QPainter应用
- 决定学Qt了。。
- 在北京这样的城市你保留了多少自己?
- 一步步学Qt,第四天-Qt程序发布问题
- 一步步学Qt,第四天-Qt使用sleep
- Qt工具你懂多少
- fileinputstream
- 队列
- 高性能接入sever开发优化
- 《程序员面试宝典》一些笔记(2)
- pku acm 1080
- 一步步学Qt,第五天-Qt这样的小小差异你发现了多少
- vc2008编译器居然还有这个问题-不能加太多头文件路径
- linux中的文件有关的结构信息
- 软件开发,标准化流水线式开发的实施构想
- Spring Jms入门实例
- Everyday English
- 一个操作系统的实现 第四章 pmtest3
- ExtJS4+JSON+Servlet/Struts2实现登录验证
- char 与 unsigned char的本质区别