Qt 代码实现QStandardItemModel角色控制及QTreeView添加不同的右键菜单,同时QTreeView中的customContextMenuRequested的信号参数Qpoint传递作为右键菜单QAction的参数下发
时间: 2024-02-05 13:13:12 浏览: 103
实现QStandardItemModel角色控制:
QStandardItemModel类是Qt框架中提供的一种用于管理条目的模型类,通过重载模型类中的数据角色可以实现对数据的控制和管理。其中数据角色包括Qt::DisplayRole(显示角色)、Qt::EditRole(编辑角色)、Qt::ToolTipRole(提示角色)等多种角色。
以下是一个示例代码,演示如何实现QStandardItemModel的角色控制:
```cpp
QStandardItemModel *model = new QStandardItemModel();
QStandardItem *item = new QStandardItem("hello");
item->setData(Qt::AlignCenter, Qt::TextAlignmentRole); // 设置文字居中
model->setItem(0, 0, item);
```
在上述代码中,我们通过setData()函数设置了Qt::TextAlignmentRole角色,将文字居中显示。
实现QTreeView添加不同的右键菜单:
QTreeView是Qt框架中提供的一种用于显示树形结构数据的控件,通过重载QTreeView的contextMenuEvent()函数,可以实现对右键菜单的定制。
以下是一个示例代码,演示如何实现QTreeView的右键菜单:
```cpp
void MyTreeView::contextMenuEvent(QContextMenuEvent *event){
QMenu menu(this);
QAction *action1 = new QAction("Action1", this);
QAction *action2 = new QAction("Action2", this);
menu.addAction(action1);
menu.addAction(action2);
menu.exec(event->globalPos());
}
```
在上述代码中,我们通过QMenu类创建了一个菜单,并添加了两个QAction对象。最后通过调用QMenu的exec()函数显示菜单。
同时QTreeView中的customContextMenuRequested的信号参数QPoint传递作为右键菜单QAction的参数下发:
在QTreeView中,当用户右键单击时,会发出customContextMenuRequested信号。我们可以在该信号的槽函数中获取鼠标单击的位置,并将该位置作为参数传递给右键菜单的QAction对象。
以下是一个示例代码,演示如何将customContextMenuRequested信号的参数作为右键菜单QAction的参数下发:
```cpp
void MyTreeView::customContextMenuRequested(const QPoint &pos){
QModelIndex index = indexAt(pos);
QMenu menu(this);
QAction *action = new QAction(QString("Action %1").arg(index.row()), this);
menu.addAction(action);
menu.exec(pos);
}
```
在上述代码中,我们首先获取鼠标单击的位置pos,并通过indexAt()函数获取到该位置对应的QModelIndex对象。接着,我们创建了一个QAction对象,并将该对象的文本设置为"Action"加上该QModelIndex对象所在的行号。最后,我们将该QAction对象添加到菜单中,并通过调用QMenu的exec()函数显示菜单。注意,我们将pos作为参数传递给exec()函数,以保证菜单显示在鼠标单击的位置上。
阅读全文