标签: qstandarditem

在QTreeView中为特定项添加右键单击菜单

我用Qt Creator用c ++编写了一个Qt桌面应用程序.

我在主窗口中声明了一个treeView和一个兼容的模型.

现在,我想为树项目提供一个右键单击菜单.不是针对所有项目,而是针对其中的一部分,例如:对于具有偶数索引的树元素.

我尝试使用以下代码添加一个简单的上下文菜单:

在.h文件中:

QStandardItemModel* model;
QMenu* contextMenu;
QAction* uninstallAction;
private slots:
    void uninstallAppletClickedSlot();
Run Code Online (Sandbox Code Playgroud)

并在.cpp文件中:

在构造函数中:

ui->treeView->setModel(model);
contextMenu = new QMenu(ui->treeView);
ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);
uninstallAction = new QAction("Uninstall TA",contextMenu);
ui->treeView->addAction(uninstallAction);
connect(uninstallAction, SIGNAL(triggered()), this, SLOT(uninstallAppletClickedSlot()));
Run Code Online (Sandbox Code Playgroud)

和一个插槽:

void MainWindow::uninstallAppletClickedSlot()
{

}
Run Code Online (Sandbox Code Playgroud)

这段代码给了我一个带有想要动作的上下文菜单,但你知道我怎么能只为QStandardItem带有偶数索引的s 添加这个动作?

顺便说一句,我是通过以下方式向treeView添加项目:

void MainWindow::AddItem(QString name)
{
QStandardItem *parentItem = model->invisibleRootItem();
QStandardItem *app = new QStandardItem(name);
parentItem->appendRow(app);
}
Run Code Online (Sandbox Code Playgroud)

我google了很多,但一无所获:(

提前致谢!

qt right-click qtreeview qstandarditem

30
推荐指数
1
解决办法
3万
查看次数

PyQT - 你如何使QTreeview无法编辑但也可以选择?

我刚刚从wxPython切换到PyQT,我在QTreeview上遇到了一些麻烦.我有一个QTreeview,它将显示分类为可扩展的部分的数据,但是这个TreeView中的数据不应该是可编辑的,但我需要能够让用户选择数据(双击将执行另一个方法).我不确定如何使它只读,但也可以选择.我使用QStandardItemModel和QStandardItem来保存数据.

任何帮助将非常感激.

python pyqt qtreeview qstandarditemmodel qstandarditem

7
推荐指数
1
解决办法
4834
查看次数

如何完全遍历QStandardItemModel?

我有一个QStandardItemModel,我在q QTreeView中显示.工作良好.

为了突出显示相关的行,我想强调其中的一些:因此我有一个QStringList,其中包含要突出显示的QStandItem*的名称.

QStringList namesToBeHighlighted = getNames();

QModelIndex in = myModel->index(0, 0);

if ( in.isValid() ) {

    for (int curIndex = 0; curIndex < myModel->rowCount(in); ++curIndex) {

        QModelIndex si = myModel->index(curIndex, 0, in);
        QStandardItem *curItem = myModel->itemFromIndex(si);

        if (curItem) {
           QString curItemName = curItem->text();

           if ( namesToBeHighlighted.contains(curItem->text()) ) {
               curItem->setFont(highlightFont);
           }
           else curItem->setFont(unHighlightFont);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的模型有以下结构:
Level_1
+ - > Level_11
+ - > Level_12
+ - > Level_13
Level_2
+ - > Level_21
+ - > Level_22
+ …

c++ qstandarditemmodel qt5 qmodelindex qstandarditem

5
推荐指数
1
解决办法
9055
查看次数

Qt itemChanged 信号与 QTreeView 模型仅适用于第一级项目

我不知道我的qt代码是否做错了什么。我只需要在itemChanged每次项目数据更改时发出该信号。我使用以下代码来制作模型:

QStandardItemModel* model = new QStandardItemModel;
QStandardItem *parentItem = model->invisibleRootItem();
QList<QStandardItem*> itemList1;
QList<QStandardItem*> itemList2;
QList<QStandardItem*> itemList3;
QStandardItem* item1;
QStandardItem* item2;
QStandardItem* item3;

for (int i = 0; i < 3; ++i)
{
    item1 = new QStandardItem;
    item1->setText("item1-" + QString::number(i));

    for (int i = 0; i < 3; ++i)
    {
        item2 = new QStandardItem;
        item2->setText("item2-" + QString::number(i));

        for (int i = 0; i < 3; ++i)
        {
            item3 = new QStandardItem;
            item3->setText("item3-" + QString::number(i));
            itemList3 << item3;
        }
        item2->appendRows(itemList3); …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtreeview qstandarditem

4
推荐指数
1
解决办法
2669
查看次数

按项目数据从 QStandardItemModel 中查找/删除行

我有QStandardItemModel一个单列(代表一个列表)。列表中的每个项目都有一个唯一的整数ID,存储为QStandardItem的数据(QStandardItem::setData我猜默认情况下是通过它存储的Qt::UserRole+1)。

给定这些 ID 之一,我想从模型中查找并删除相应的行。现在我正在这样做:

void NetworkManager::removeSessionFromModel (QStandardItemModel *model, int sessionId) {

    foreach (const QStandardItem *item, model->findItems("*", Qt::MatchWildcard)) {
        if (item->data() == sessionId) {
            model->removeRow(item->index().row());
            break;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但该函数的每一行都让我感到畏缩。有没有更干净的方法来做到这一点?

c++ qstandarditemmodel qt5 qstandarditem

4
推荐指数
1
解决办法
3864
查看次数

从 QTableView 的 QStandardItemModel 获取项目

我有一个QTreeView其中每个节点代表一个数据对象。我设法将指向该数据对象的指针打包到 a 中QVariant,以便我知道在树中选择了哪个。我可以通过该函数访问节点currentIndex()

树的根位于QStandardItemModel::invisibleRootItem()。其他节点由父节点函数添加appendRow。所以这些项目没有rowcolumn我可以在 中使用QStandardItemModel::item()

有没有办法给节点提供有效的坐标或检索没有坐标的项目。

qt qtreeview qstandarditemmodel qt-signals qstandarditem

3
推荐指数
1
解决办法
7300
查看次数

如何在Qt / PyQt中删除QStandardItem的文本?

QStandardItemModel在PySide中有一个,想删除某些行上的文本(这是一个待办事项列表应用程序,当任务完成时,我想删除文本)。鉴于QStandardItem显示的很好,根据文档,我尝试使用以下内容删除文本:

QStandardItem.setFont(QtGui.QFont.setStrikeOut(True))
Run Code Online (Sandbox Code Playgroud)

但是文本没有改变,并且出现错误:

TypeError: descriptor 'setStrikeOut' requires a 'PySide.QtGui.QFont' object but received a 'bool'
Run Code Online (Sandbox Code Playgroud)

qt pyqt text-styling pyside qstandarditem

2
推荐指数
1
解决办法
1883
查看次数

PyQt5:为 QStandardItem 设置数据

如果我构造一个QStandardItem这样的:

item = QtGui.QStandardItem('Item Name')
Run Code Online (Sandbox Code Playgroud)

当这个项目被添加到一个QStandardItemModel模型并在一个模型中查看时,QTreeView我得到一个单元格,上面写着Item Name. 但是,当我构建一个像:

item = QtGui.QStandardItem()
item.setData(123)
Run Code Online (Sandbox Code Playgroud)

我得到一个空单元格,但我仍然可以通过调用来调用数据:

print(item.data())
Run Code Online (Sandbox Code Playgroud)

我会得到号码123。如何让数字实际显示在单元格中?

python qt pyqt qtreeview qstandarditem

2
推荐指数
1
解决办法
4514
查看次数

如何使用双击事件获取pyqt qtreeview项目子项?

我正在使用PyQt4和python 2.7.9.我有一个包含Oracle数据库数据的QTreeView.代码是这样的:

model = QStandardItemModel(0,1)
self.treeMedia.setModel(model)
for rowalb in self.SELECT_TREE_ALBUM(codus):
    nodeItem = QStandardItem(str(rowalb[1]).decode('utf-8'))
    for rowph in self.SELECT_TREE_PHOTO(int(rowalb[0])):
        childItem = QStandardItem(str(rowph[0]))
        childItem.setEditable(False)
        nodeItem.insertRows(0, [childItem])
    nodeItem.setEditable(False)
    model.appendRow(nodeItem)
model.setHorizontalHeaderLabels(['Data'])
Run Code Online (Sandbox Code Playgroud)

SELECT_TREE_ALBUM(codus是专辑所有者的id)和SELECT_TREE_PHOTO是从数据库返回数据的函数.rowalb 1是专辑的名称,rowalb [0]是ID,rowalb [0]用于获取这张专辑的照片.图为:

在此输入图像描述

我想使用doubleclick事件获取childItem数据(例如1491475964461012,1491475821127693,1491475631127712,1491475141127761或1480407552234520).我试图将这些代码放入构造函数中:

self.treeMedia.doubleClicked.connect(self.treeMedia_doubleClicked)
Run Code Online (Sandbox Code Playgroud)

之后我添加了这个功能:

def treeMedia_doubleClicked(self,index):
    item = self.treeMedia.model().item(index.row(),index.column())
    strData = item.data(0).toPyObject()
    #self.treeMedia.currentIndex()
    print('' + str(strData))
Run Code Online (Sandbox Code Playgroud)

但有时我看到nodeItem信息(例如"恐怖"或"fotos de perfil")和其他我得到此错误:"AttributeError:'NoneType'对象没有属性'data'".可能是什么问题?是填写qtreeview的问题?或者是使用索引时双击事件功能的问题?请帮我.提前致谢.

pyqt4 qtreeview python-2.7 qstandarditemmodel qstandarditem

1
推荐指数
1
解决办法
5254
查看次数