标签: qtreeview

如何在Qt中使项目视图呈现丰富(html)文本

假设我的模型具有Qt :: DisplayRole的以下字符串的项目

<span>blah-blah <b>some text</b> other blah</span>
Run Code Online (Sandbox Code Playgroud)

我想要QTreeView(实际上,任何项目视图)将其渲染为富文本.相反,项目视图默认情况下将其呈现为纯文本.如何实现所需的渲染?


实际上,这是一个搜索结果模型.用户输入文本,根据该文本搜索某些文档,并向用户显示搜索结果,其中搜索的单词应比周围文本更大胆.

qt rendering richtext qlistview qtreeview

48
推荐指数
5
解决办法
2万
查看次数

在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万
查看次数

QTreeView中间列填充宽度空间而不是最后一列

怎么做到这一点:

中间栏填充空间

我已经尝试过这种方式:

view->header()->setResizeMode(INDEX_COLUMN_SKU, QHeaderView::Interactive);
view->header()->setResizeMode(INDEX_COLUMN_NAME, QHeaderView::Stretch);
view->header()->setResizeMode(INDEX_COLUMN_QUANTITY, QHeaderView::Interactive);
view->header()->setResizeMode(INDEX_COLUMN_PRICE, QHeaderView::Interactive);
Run Code Online (Sandbox Code Playgroud)

但不起作用.

size qt header qtreeview

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

如何恢复QTreeView上次扩展状态?

是)我有的:

  1. QTreeView 带有表数据的类
  2. 和连接的QAbstractTableModel模型

问题:如何保存扩展的物品状态?有人已经完成了解决方案吗?

PS:我知道,我可以自己做这个代码,但是我没有太多时间,这不是我们项目的主要问题,但我们仍然需要它,因为app包含很多这样的表,并且每次扩展树项都是烦恼的过程...

qt qt4 qtreeview

18
推荐指数
4
解决办法
2万
查看次数

以编程方式在QTreeView中选择一行

我有一个QTreeView和QFileSystemModel作为模型.

QTreeView将SelectionBehavior设置为SelectRows.

在我的代码中,我读了一个数据集来选择,然后通过以下方式选择它们:

idx = treeview->model()->index(search); 
selection->select(idx, QItemSelectionModel::Select);
Run Code Online (Sandbox Code Playgroud)

这将选择一个单元格,而不是行..

添加了一个愚蠢的解决方法,但宁愿以正确的方式解决这个问题.

for (int col=0; col< treeview->model()->columnCount(); col++) 
{ 
   idx = treeview->model()->index(search, col); 
   selection->select(idx, QItemSelectionModel::Select); 
} 
Run Code Online (Sandbox Code Playgroud)

或者是^^唯一的方法吗?

c++ qt qt4 qtreeview

18
推荐指数
2
解决办法
2万
查看次数

是否可以通过单击项目在QTreeView中取消选择?

我希望能够通过单击QTreeView中没有项目的部分来取消选择QTreeView中的项目,但我似乎无法找到这样做.我拦截了一个不在项目上的点击,但是QTreeView没有clicked信号,所以我无法弄清楚如何做到这一点.

qt pyqt qtreeview

14
推荐指数
4
解决办法
2万
查看次数

如何在QTreeView上设置列宽?

忍受我,我仍然是QT的新手,并且无法解决它如何处理事情.

我用两列创建并填充了一个QTreeView:

class AppForm(QMainWindow):
    def __init__(self, parent = None):
        super(AppForm, self).__init__(parent)
        self.model = QStandardItemModel()
        self.view = QTreeView()
        self.view.setColumnWidth(0, 800)
        self.view.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.view.setModel(self.model)
        self.setCentralWidget(self.view)
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了列非常狭窄.我希望setColumnWidth(0,800)会扩展第一列,但它似乎没有任何效果.设置列宽的正确方法是什么?

python pyqt pyqt4 qtreeview

12
推荐指数
2
解决办法
2万
查看次数

在PyQt中具有拖放支持的QTreeView

在PyQt 4中,我想创建一个QTreeView,可以通过拖放操作重新组织其结构.

我为QTreeView实现了自己的模型(QAbstractItemModel),因此我的QTreeView正确显示了数据.现在我想为树的节点添加拖放支持,以便能够将树内的节点从一个父节点移动到另一个节点,拖动复制等等,但是我找不到任何完整的教程如何实现这一点.我找到了很少的QTreeWidget教程和提示,但没有为自定义模型的QTreeView找到.有人能指出我在哪里看?

谢谢.

python drag-and-drop pyqt qtreeview

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

QFileSystemModel setRootPath

我正在尝试创建一个Qt应用程序,它显示文件夹的内容(Mac OS中的"Users"文件夹).这是代码:

QFileSystemModel *dirModel = new QFileSystemModel;
dirModel->setRootPath("/Users");

ui->listView->setModel(dirModel);
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用这段代码

当我运行应用程序时,它不显示"/ Users"文件夹的内容,而是显示根驱动器(注意:不是驱动器的内容).该文件夹确实存在,我也尝试使用其他文件夹.

c++ macos qt qtreeview qfilesystemmodel

11
推荐指数
2
解决办法
7995
查看次数

更改QTreeView的行背景颜色不起作用

我有一个QTreeView并且想要行的不同背景颜色,具体取决于它们的内容.为实现这一目标,我从中派生了一个class MyTreeViewfrom QTreeView并实现了paint方法,如下所示:

    void MyTreeView::drawRow (QPainter* painter,
                              const QStyleOptionViewItem& option,
                              const QModelIndex& index) const
    {
      QStyleOptionViewItem newOption(option);

      if (someCondition)
      {
        newOption.palette.setColor( QPalette::Base, QColor(255, 0, 0) );
        newOption.palette.setColor( QPalette::AlternateBase, QColor(200, 0, 0) );
      }
      else
      {
        newOption.palette.setColor( QPalette::Base, QColor(0, 0, 255) );
        newOption.palette.setColor( QPalette::AlternateBase, QColor(0, 0, 200) );
      }

      QTreeView::drawRow(painter, newOption, index);
    }
Run Code Online (Sandbox Code Playgroud)

最初,我设置setAlternatingRowColors(true);了QTreeView.

我的问题:QPalette :: Base设置颜色没有任何效果.每隔一行保持白色.

但是,设置QPalette :: AlternateBase按预期工作.我试着setAutoFillBackground(true)setAutoFillBackground(false)无任何影响.

有没有提示如何解决这个问题?谢谢.


备注:通过调整 …

c++ user-interface qt qtreeview

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