- 浏览: 3445984 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
sonichy:
Qt5改动很多,要改改了。
基于QItemDelegate的例子1 SpinBoxDelegate -
我的主页6:
楼主,2.2子查询的分页方式:SELECT * FROM ar ...
Mysql 分页语句Limit用法 -
liguoqi:
非常感谢楼主的用心指导,工具以及图片例子都提供了 赞!
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
问下这个图片怎么解压损坏呀
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
楼主讲解的非常详细,还附带工具和图片例子,非常感谢
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载
Qt中自带的例子。详细情况,还得仔细看一下Model/View那一章。
The Spin Box Delegate example shows how to create an editor for a custom delegate in the model/view framework by reusing a standard Qt editor widget.
The model/view framework provides a standard delegate that is used by default with the standard view classes. For most purposes, the selection of editor widgets available through this delegate is sufficient for editing text, boolean values, and other simple data types. However, for specific data types, it is sometimes necessary to use a custom delegate to either display the data in a specific way, or allow the user to edit it with a custom control.
This concepts behind this example are covered in the Delegate Classes chapter of the Model/View Programming overview.
SpinBoxDelegate Class Definition
The definition of the delegate is as follows:
class SpinBoxDelegate : public QItemDelegate
{
Q_OBJECT
public:
SpinBoxDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
The delegate class declares only those functions that are needed to create an editor widget, display it at the correct location in a view, and communicate with a model. Custom delegates can also provide their own painting code by reimplementing the paintEvent() function.
SpinBoxDelegate Class Implementation
Since the delegate is stateless, the constructor only needs to call the base class's constructor with the parent QObject as its argument:
SpinBoxDelegate::SpinBoxDelegate(QObject *parent)
: QItemDelegate(parent)
{
}
Since the delegate is a subclass of QItemDelegate, the data it retrieves from the model is displayed in a default style, and we do not need to provide a custom paintEvent().
The createEditor() function returns an editor widget, in this case a spin box that restricts values from the model to integers from 0 to 100 inclusive.
QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/* option */,
const QModelIndex &/* index */) const
{
QSpinBox *editor = new QSpinBox(parent);
editor->setMinimum(0);
editor->setMaximum(100);
return editor;
}
We install an event filter on the spin box to ensure that it behaves in a way that is consistent with other delegates. The implementation for the event filter is provided by the base class.
The setEditorData() function reads data from the model, converts it to an integer value, and writes it to the editor widget.
void SpinBoxDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
int value = index.model()->data(index, Qt::EditRole).toInt();
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->setValue(value);
}
Since the view treats delegates as ordinary QWidget instances, we have to use a static cast before we can set the value in the spin box.
The setModelData() function reads the contents of the spin box, and writes it to the model.
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->interpretText();
int value = spinBox->value();
model->setData(index, value, Qt::EditRole);
}
We call interpretText() to make sure that we obtain the most up-to-date value in the spin box.
The updateEditorGeometry() function updates the editor widget's geometry using the information supplied in the style option. This is the minimum that the delegate must do in this case.
void SpinBoxDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
editor->setGeometry(option.rect);
}
More complex editor widgets may divide the rectangle available in option.rect between different child widgets if required.
This example is written in a slightly different way to many of the other examples supplied with Qt. To demonstrate the use of a custom editor widget in a standard view, it is necessary to set up a model containing some arbitrary data and a view to display it.
We set up the application in the normal way, construct a standard item model to hold some data, set up a table view to use the data in the model, and construct a custom delegate to use for editing:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QStandardItemModel model(4, 2);
QTableView tableView;
tableView.setModel(&model);
SpinBoxDelegate delegate;
tableView.setItemDelegate(&delegate);
The table view is informed about the delegate, and will use it to display each of the items. Since the delegate is a subclass of QItemDelegate, each cell in the table will be rendered using standard painting operations.
We insert some arbitrary data into the model for demonstration purposes:
for (int row = 0; row < 4; ++row) {
for (int column = 0; column < 2; ++column) {
QModelIndex index = model.index(row, column, QModelIndex());
model.setData(index, QVariant((row+1) * (column+1)));
}
}
Finally, the table view is displayed with a window title, and we start the application's event loop:
tableView.setWindowTitle(QObject::tr("Spin Box Delegate"));
tableView.show();
return app.exec();
}
Each of the cells in the table can now be edited in the usual way, but the spin box ensures that the data returned to the model is always constrained by the values allowed by the spin box delegate.
发表评论
-
Qt官网变更【2012】
2012-09-21 19:30 4215Qt最近被Digia完全收购,诺基亚这两年的不理不睬,没有魄力 ... -
【转】QT实现不规则窗体
2012-09-21 18:50 4991看到好文章,收藏一下: 看到网上有很多不规则窗体的实现 ... -
Qt应用程序如何使用DCMTK类库进行二次开发DICOM数据传输
2012-09-13 09:35 0参考文章: 1、Using DCMTK with ... -
【转】将QT开发的界面程序封装成DLL,在VC中成功调用
2012-09-11 10:33 21121最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后 ... -
诺基亚挥别Qt,转手给Digia
2012-09-11 09:37 2858一家总部位于芬兰的IT业务供应商Digia今天宣布,已经签署了 ... -
Qt多线程间信号槽传递非QObject类型对象的参数
2012-09-07 15:29 21381一、以前就发现过这个问题: 在Qt项目中,有时候为了 ... -
QT样式表(QStyleSheet)
2012-08-17 10:37 17894QT样式表 (QStyleSheet) 作者:刘旭晖 ... -
FinalData磁盘文件恢复工具(绿色破解版)
2012-08-02 13:28 8590FinalData磁盘文件恢复工具(绿色破解版),使用起来很方 ... -
Eclipse Qt开发环境的建立【转】
2012-08-01 11:15 43801.下载Eclipse目前Eclipse+CDT已经可以 ... -
汽车辐射监测系统-Qt开发
2012-07-25 16:18 4693最近晚上抽空忙了两个月,才把一个小系统做完。虽然做的不是太完 ... -
Qt做发布版,解决声音和图片、中文字体乱码问题
2012-07-14 16:02 4866Qt做发布版,解决声音和图片、中文字体乱码问题 ... -
QTableView使用中的疑问,如何及时显示操作Model后的结果?
2012-06-01 14:52 0最终的解决方法:我正 ... -
【转】Qt QTableview使用
2012-06-01 09:49 9676QTableWidget是QT程序中常用的显示数 ... -
QTableView双击 单机事件信号
2012-06-01 09:47 23101双击QTableView的行,获取该行数据 代码 ... -
QMessageBox改变大小
2012-05-31 15:33 8446创建一个QMessageBox: QMessageBo ... -
更新QTableView中的进度条状态
2012-05-30 14:37 14863前段时间,我接触了,如何在一个QTableView中加入一个控 ... -
QThread 线程暂停 停止功能的实现
2012-05-29 11:56 12204为了实现Qt中线程的暂停运行,和停止运行的控制功能 需要在设 ... -
QT环境变量
2012-05-28 18:53 5593不知道为啥同事有台电脑,装完Qt-VS2008库,和VS Ad ... -
广告光
2012-05-24 18:33 0盈创广告联盟 http://www.yo114.cn/ ... -
Test
2012-05-24 18:22 2190Test<IMG SRC="cf08e32c2 ...
相关推荐
在本项目中,"基于QT实现的上下拉刷新的功能"是利用QT的QML模块来设计和实现的。 QML,全称Qt Meta Language,是QT框架的一部分,它是一种声明式语言,用于描述UI界面和交互逻辑。QML通过简洁的JSON-like语法定义了...
本项目以"表格及绘图2中形式表示输入输出关系图.rar"为主题,利用Qt框架中的关键组件,如QGraphicsView、QGraphicsScene和QGraphicsItem,来创建一个直观的图形界面,用于展示算法的输入输出参数之间的关联。...
3. **QTableView**: QTableView是QT中处理表格数据的控件。它允许显示二维表格数据,并且可以与不同的数据模型(如QStandardItemModel或QSqlTableModel)配合使用。QTableView提供了列的调整、排序、过滤等功能,...
4. **界面交互**:为了使用户能够控制预览,如缩放、旋转等,可以添加`QPrintPreviewWidget`的布局控件。同时,提供一个按钮来触发打印操作: ```cpp QPushButton *printButton = new QPushButton("打印", parent);...
在Qt中,有各种各样的组件和控件供开发者使用,如按钮(QPushButton)、标签(QLabel)、文本框(QLineEdit)、对话框(QDialog)、表格视图(QTableView)等。这些组件覆盖了大部分常见的UI元素,且可以通过样式表...
QT图形与视图框架是Qt库中的一个核心组件,它为开发者提供了强大的2D和3D图形渲染能力,以及高效的数据可视化解决方案。这个框架的设计理念是将数据模型、视图和代理模型分离,使得在复杂应用程序中管理和显示大量...
3. **模型视图架构(Model/View Architecture)**:Qt的模型视图架构提供了一种灵活的方式来展示和操作数据,可以用于表格、列表、树形结构等多种数据展示。 4. **图形视图框架(Graphics View Framework)**:用于...
QT的容器控件如`QListWidget`、`QTableWidget`和`QTreeWidget`用于展示列表、表格和树状结构的数据。它们可以与数据模型(如`QListModel`、`QStandardItemModel`)配合,实现数据的动态更新和操作。 此外,QT还有...
QAbstractItemModel定义了模型接口,允许数据以表格或列表形式展示。QTableView、QListView和QTreeView是常见的视图组件,它们可以根据模型数据动态更新。通过这种方式,数据模型可以独立于用户界面变化,增强了程序...
7. **数据库集成**:通过QSqlDatabase、QSqlQuery等类,Qt可以直接与多种数据库系统交互,如SQLite、MySQL和PostgreSQL。 8. **国际化和本地化**:Qt支持多语言环境,QTranslator和QLocale类使得应用能够轻松适应...
- **11.1 顺序容器**:这部分介绍了Qt中的顺序容器类,如QList、QVector等,这些容器类适用于存储有序的数据集。 - **11.2 关联容器**:这里讨论了Qt中的关联容器类,如QMap、QHash等,这些容器类适用于基于键值对...
我们可以使用QGraphicsView和QGraphicsScene来创建复杂的2D图形场景,并添加动画效果,如平移、旋转和缩放,以增强用户体验。 在课程中,我们还会接触到资源管理,包括图标(QIcon)、字体(QFont)和本地化...
为了更好地与数据库交互,Qt提供了一系列数据感知部件,如表格视图、列表视图等。这些部件可以自动更新数据显示,使得应用程序能够实时反映数据库的变化。 #### 八、国际化 ##### 8.1 Unicode 为了支持国际化,Qt...
3. **模型视图编程**:QT5的模型视图架构支持数据的分层表示和显示,常用于表格和列表。模型存储数据,视图负责展示,而代理在两者之间协调。 4. **图形视图框架**:用于处理复杂的2D图形和动画。QGraphicsView和...
例如,QTableView和QAbstractItemModel一起用于展示和操作表格数据。 4. **图形视图框架**:Qt Graphics View Framework提供了一个强大的2D绘图和动画系统,用于创建复杂的用户界面和图像处理应用。 5. **网络编程...
在本文中,我们将深入探讨Qt库中的常用控件,这些控件是开发高效、美观的图形用户界面(GUI)的基础。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备。它提供了丰富的控件集,使得开发者能够...
在QT4.5中,Qt Designer提供了丰富的控件库,如按钮、文本框、表格视图等,开发者可以自由布局和配置,极大地简化了UI设计过程。此外,Qt Designer支持生成.ui文件,这是一种XML格式的文件,记录了界面元素的布局和...
在Qt库中,Widgets是构建用户界面(UI)的核心组件,它们提供了丰富的功能和灵活性,使得开发者能够创建出美观且功能强大的应用程序。本例程主要关注Qt中的常用控件,通过实际代码示例来帮助理解如何使用这些控件。...
“currentRowChanged”是一个事件,通常在Qt的表格或列表视图中触发,当用户在模型(如数据表格)的当前行发生变化时,这个事件会被激活。这在地图编辑器中可能用于追踪用户在地图层或瓦片集中的当前选择,允许实时...