假设我的模型具有Qt :: DisplayRole的以下字符串的项目
<span>blah-blah <b>some text</b> other blah</span>
Run Code Online (Sandbox Code Playgroud)
我想要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了很多,但一无所获:(
提前致谢!
怎么做到这一点:
我已经尝试过这种方式:
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)
但不起作用.
是)我有的:
QTreeView
带有表数据的类QAbstractTableModel
模型问题:如何保存扩展的物品状态?有人已经完成了解决方案吗?
PS:我知道,我可以自己做这个代码,但是我没有太多时间,这不是我们项目的主要问题,但我们仍然需要它,因为app包含很多这样的表,并且每次扩展树项都是烦恼的过程...
我有一个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)
或者是^^唯一的方法吗?
我希望能够通过单击QTreeView中没有项目的部分来取消选择QTreeView中的项目,但我似乎无法找到这样做.我拦截了一个不在项目上的点击,但是QTreeView没有clicked
信号,所以我无法弄清楚如何做到这一点.
忍受我,我仍然是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)会扩展第一列,但它似乎没有任何效果.设置列宽的正确方法是什么?
在PyQt 4中,我想创建一个QTreeView,可以通过拖放操作重新组织其结构.
我为QTreeView实现了自己的模型(QAbstractItemModel),因此我的QTreeView正确显示了数据.现在我想为树的节点添加拖放支持,以便能够将树内的节点从一个父节点移动到另一个节点,拖动复制等等,但是我找不到任何完整的教程如何实现这一点.我找到了很少的QTreeWidget教程和提示,但没有为自定义模型的QTreeView找到.有人能指出我在哪里看?
谢谢.
我正在尝试创建一个Qt应用程序,它显示文件夹的内容(Mac OS中的"Users"文件夹).这是代码:
QFileSystemModel *dirModel = new QFileSystemModel;
dirModel->setRootPath("/Users");
ui->listView->setModel(dirModel);
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用这段代码
当我运行应用程序时,它不显示"/ Users"文件夹的内容,而是显示根驱动器(注意:不是驱动器的内容).该文件夹确实存在,我也尝试使用其他文件夹.
我有一个QTreeView
并且想要行的不同背景颜色,具体取决于它们的内容.为实现这一目标,我从中派生了一个class MyTreeView
from 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)
无任何影响.
有没有提示如何解决这个问题?谢谢.
备注:通过调整 …