从非UI的QThread修改QStandardItemModel?
i具有将QStandardItemModel绑定到QListView的QT4应用程序,并将模型从背景/非UI线程更新. 有时,当QStandardItem的S setText(..)方法从非UI线程反复调用时,该应用程序将在la datachanganged(..)处理程序中崩溃.我可以通过在for循环中反复致电setText("xxxxx")来复制问题.在我的应用中,从网络中读取数据,因此我在单独的非UI线程中更新模型. 这是常见的PB吗?如果我正确理解,这与排队连接有关,QStandardItemModel不是线程安全吗?如何解决这个问题? 谢谢! 解决方案 QStandardItemModel是QTGUI库的一部分,IIRC中的所有类都被认为不是螺纹保护.如果将数据的实际设置移至GUI线程,则应该可以.您可以使用网络线程的排队信号很容易地执行此操作.
40 2023-10-20
编程技术问答社区
在c++中对QStandardItemModel进行排序 Qt
我有一个类型的qstandardemmodel模型,看起来像这样: QHash roleNames; roleNames[Car2goVehicle::NameRole] = "plate_number"; roleNames[Car2goVehicle::DescriptionRole] = "address"; roleNames[Car2goVehicle::FuelRole] = "fuel"; roleNames[Car2goVehicle::InteriorRole] = "interior"; roleNames[Car2goVehicle::ExteriorRole] = "exterior"; roleNames[Car2goVehicle::VinRole] = "vin";
6 2023-09-07
编程技术问答社区
如何将一个QAbstractItemModel序列化为QDataStream?
我已经设置了一个qabstractiTemModel,并用数据填充了该数据.我的Qtreeview小部件正确显示该模型中的每个数据. 现在,我想将该模型存储在二进制文件中(以及后来的cource load载荷将二进制文件返回到模型中).这可能吗? 解决方案 模型序列化的细节在一定程度上取决于模型的实现.一些陷阱包括: 完美可用的模型可能无法实现insertRows/insertColumns,而是更喜欢使用自定义方法. QStandardItemModel之类的模型可能具有不同类型的基本项目.避免后,原型项目工厂将使用一种原型类型的克隆重新填充模型.为了防止这种情况,必须将其类型标识符暴露于序列化中,并提供了一种在避免时重建正确类型项目的方法. 让我们看看为标准项目模型实施它的一种方法.原型多态性项目类可以通过数据角色暴露其类型.设置此角色后,它应该以正确的类型重新创建自己. 鉴于此,通用序列化器不可行. 让我们看一个完整的示例.给定模型类型所
12 2023-08-28
编程技术问答社区
QSortFilterProxyModel 不会更新 QTableview
我正在尝试将QSortFilterProxymodel与QstandardItemModel一起使用,但是FilterAcceptedrows()未更新视图. 在函数filterAcceptedrows()中,行正确菲力列表,但视图未更新.它仍在显示所有行.您可以在下面找到我已经尝试过的代码,有人可以告诉我我在这里错过了一些东西 这是qdialog中的代码. m_modelApp = new QStandardItemModel(); m_proxyApp = new ProxyModelApp(); m_proxyApp->setSourceModel(m_modelApp); m_lstApp->setModel(m_modelApp); 这就是我将数据添加到模型的方式. QStandardItem *item1 = new QStandardItem(); QStandardItem *item2 = new QStandardItem(
6 2023-07-25
编程技术问答社区
使用 QSortFilterItemProxy 保持结构
因此,我使用的是略微自定义QSortFilterProxyModel(刚刚实现的filterAcceptsRows),以从QStandardItemModel中过滤元素.当前,它使用setFilterRegExp完美过滤,但是我遇到的问题是,由于ProxyModel仅搜索元素,所以我失去了结构.例如,假设我有这个结构: Root Folder 1 |----Sub Folder 1 |-----Item 1 |-----Item 2 |-----Item 3 |----Sub Folder 2 |-----Item 1 |-----Item 2 |-----Item 3 Root Folder 2 |----Sub Folder 1 |-----Item 1
6 2023-07-25
编程技术问答社区
QTreeView,如何在鼠标悬停在一行上时调用操作?
我正在使用C ++ QT5.目前,我有一个qstandardemmodel显示为带有多个行和列的QTREEVIEW.我知道使用setStyleSheet(),但这似乎只是改变了行的颜色.我正在寻找的是,当鼠标徘徊在一排时,我可以使用该功能来操纵我的游戏. 解决方案 您可以使用委托书( paint 方法. void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if(index.row() == 2 && (option.state & QStyle::State_MouseOver)) { painter->fillRect(option.rect, Qt::blue); } else { QStyledItemDelegate::paint(painter, option, inde
6 2023-07-25
编程技术问答社区
使用自定义委托通过 TableView 编辑 QStandardItemModel
我有一个我通过QML表视图显示的QstandardEmmodel. 这是模型: class mystandardmodel: public QStandardItemModel { public: mystandardmodel(); enum Role { role1=Qt::UserRole, role2 }; explicit mystandardmodel(QObject * parent = 0): QStandardItemModel(parent){} //explicit mystandardmodel( int rows, int columns, QObject * parent = 0 ) // : QStandardItemModel(rows, columns, parent){} QHash roleN
8 2023-07-25
编程技术问答社区
Qtableview里面的QStandardItemModel
我在QTableView内使用QStandardItemModel.在这里,我的MainWindow内有两个按钮和Qtableview. 我只需要4列.行会有所不同.这两个按钮将用于添加/删除行(测试用例). setHorizontalHeaderItem没有显示所有文本(意味着所有文本都不可见).例如,如果我放置'Text for the Employee Name'它不完全可见? 如何制作QStandardItemModel占据完整QTableview(width).目前它显示在左上角? 如何实现它? 代码: model= new QStandardItemModel(4, 4); for (int row = 0; row
34 2023-07-17
编程技术问答社区
QTableView的自定义排序方法?
如何为QTableView或模型设置自定义排序方法? (我应该重新实现哪个功能) 默认排序算法用于字符串,我想要某些特定列的数字排序方法. 谢谢. 解决方案 您应该使用 qsortfilterproxymodel qsortfilterproxymodel .您应该重新完成Lesthan方法.然后,您必须为代理模型设置SourceModel,并将代理模型设置为视图 class MyProxyModel: public QSortFilterProxyModel { protected: bool lessThan ( const QModelIndex & left, const QModelIndex & right ) const { // your sorting rules } }; // ... somewhere where your view is accessible MyProxyModel
28 2023-07-17
编程技术问答社区
从一个QTableView中读写文件
如何读取和写入文本文件日期输入到qtableView? 这是我所拥有的,但是当数据添加到表中时,我想保存数据,当然可以在重新打开应用程序时读取它.我可以参考任何教程吗? MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); model = new QStandardItemModel(); model->setRowCount(0); ui->tableView->setModel(model); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { QStandardItem *userName = new QStandardIte
76 2023-07-17
编程技术问答社区
如何在Qt中向上移动选定的行
我有3行和2列的QTableView. (在这里我使用QStandardItemModel).单击QPUSHBUTTON时,我想向上移动/向下移动.我如何在QTableView中向上/向下行? 感谢您的回复Vahancho.我已经尝试使用QAbstractItemModel::moveRow,但它不起作用: int currentRow = ui->tableView->currentIndex().row(); QModelIndex sourceParent = ui->tableView->model()->index(ui->tableView->selectionModel()->currentIndex().row(),0); QModelIndex destinationParent = ui->tableView->model()->index(ui->tableView->selectionModel()->currentIndex().r
6 2023-07-17
编程技术问答社区
如何将QStandardItemModel创建的QTableView中的多个项目复制粘贴到一个文本/excel文件中?
如何将QTableView的多个项目/值粘贴到文本/Excel文件? ? 我的代码: tab_table_view = QtGui.QWidget() self.Tab.insertTab(0, tab_table_view, self.File_Name) self.tableView = QtGui.QTableView(tab_table_view) self.tableView.setGeometry(QtCore.QRect(0, 0, 721, 571)) self.model = QtGui.QStandardItemModel(self) self.tableView.setSelectionMode(QAbstractItemView.ExtendedSelection 此行self.tableView.setSelectionMode(QAbstractItemView.ExtendedSelection有助于在qtableView中选择多个项目,但是当
8 2023-07-17
编程技术问答社区
如何完全遍历一个QStandardItemModel?
我有一个我在q qtreeview中显示的qstandardemmodel.工作正常. 要突出显示相关的行,我想突出显示其中的一些:因此,我有一个QStringList,其中QStringList具有QstantItem* s的名称. QStringList namesToBeHighlighted = getNames(); QModelIndex in = myModel->index(0, 0); if ( in.isValid() ) { for (int curIndex = 0; curIndex rowCount(in); ++curIndex) { QModelIndex si = myModel->index(curIndex, 0, in); QStandardItem *curItem = myModel->itemFromIndex(si); if (curItem
226 2023-07-17
编程技术问答社区
QTableView QStandardItemModel 恢复或撤销用户条目
如何在qstandaritemmodel Popuplepulpleppuew上撤消或恢复用户条目? 我已将数据调整信号与一个处理程序连接起来,我在其中验证数据... connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(validateData(QModelIndex,QModelIndex))); ...但是,如果用户条目错了,我想恢复或撤消用户输入项目的先前值. 我已经阅读了有关从qabstractitemmodel继承的reverver()成员,但我不明白它的工作原理.文档说:"让模型知道它应该丢弃缓存的信息."但是我不确定用户输入的数据是缓存还是已经存储在模型上. 无论如何,如果我尝试... model->revert(); ...在错误的用户条目后它不起作用. 预先感谢! 解决方案 查看Qt的 uto框架.文档中的介绍说: QT的
4 2023-07-17
编程技术问答社区
QStandardItemModel & 绑定至自定义对象
我试图使用QT典范的城市标准数,并将其改编成我的景象.我的结果很奇怪: 这是我的用户类: class User{ public: User(); QString getFirstname() const; void setFirstname(const QString &value); QString getLastname() const; void setLastname(const QString &value); int getAge() const; void setAge(int value); private: QString firstname; QString lastname; int age; }; 我已经声明了一个usermodel.h: class UserModel: public QStandardItemModel { Q_OBJECT public: UserModel(QList users,
28 2023-07-17
编程技术问答社区
QListView & QStandardItemModel在编辑行之前检查文本
我想在用户编辑之前检查QListView中的一行文本.如果它不适合模式,我不想接受. 目前我有一个QListView和QStandardItemModel.我可以轻松地通过QStandardItemModel添加和删除项目.我还设置了列表视图的模型. 列表中是否有一些delegates或event函数或编辑模型? 解决方案 您可以超载data()和setData() QStandardItemModel函数,然后当用户尝试编辑项目时,您的setData将使用setData来调用setData,您可以在那里进行处理. 其他解决方案 如果我正确理解您,您想在用户尝试输入编辑模式时检查项目的值吗? 使用代表应该很好地适用于此: class MyItemDelegate : public QItemDelegate { public: QWidget *createEditor(QWidget *parent, const QStyle
10 2023-07-17
编程技术问答社区
使用QStandardItemModel授权擦除QTreeView中的文本
我很难在我的qtreeview中添加代表. 我已经通过一个可以正常工作的模型添加了一些qstandarditems,但是当我添加代表时,删除了文本,只能看到图标. 这是我为我的代表使用的代码: void SeqNavDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() == 0 && option.state & QStyle::State_Enabled) { const QIcon icon(QLatin1String(":/SeqNavMenu/images/green.png")); QRect iconRect(option.rect.right() - option.rect.height(),
18 2023-07-17
编程技术问答社区
带有复选框的QComboBox
我正在创建带有复选框的Qcombobox.如何防止鼠标点击鼠标的视图崩溃?我希望能够设置复选框,但是每次点击项目 - Qcombobox的下拉纸都会崩溃. 注意:目前我正在调试QT来源并正在寻找解决方法... 解决方案 首先,您需要将事件过滤器安装到组合框视图,即: combobox->view()->viewport()->installEventFilter(someobj); 您需要过滤组合框视图上发生的所有鼠标释放事件,以防止其单击时关闭: bool SomeObject::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::MouseButtonRelease) { int index = view()->currentIndex().row(); if (itemData(index, Qt::CheckSt
138 2023-07-16
编程技术问答社区
使用QStandardItemModel获取QListView中的选定索引
我正在使用此代码创建QListView和QstandardItemModel: self.listView = QtWidgets.QListView(self.groupBox2) self.listView.setGeometry(QtCore.QRect(200, 20, 400, 220)) self.entry = QtGui.QStandardItemModel() 我使用类似的内容在循环中添加项目: self.item1 = QtGui.QStandardItem("Itemname1") self.entry.appendRow(self.item1) self.item2 = QtGui.QStandardItem("Itemname2") self.entry.appendRow(self.item2) 如何将这些项目分配给列表中的列表中的0个代表" itemName1",1代表" itemName2"等.? 另外,如何在QListView中
66 2023-07-05
编程技术问答社区
自定义QStandardItemModel与自定义数据方法
我要做的是,我想制作一个带有可校验的列表视图.我能够使用QstandardEmmmmodel作为我的型号进行操作.现在,我需要做的是添加一些需要自定义数据方法的功能.因此,正如我们将要做的那样,我将qstandardemmodel子分为班级,并将其任命为listView的模型.现在我遇到的问题是,ListView仅显示文本而没有检查选项. from PyQt4.QtCore import * from PyQt4.QtGui import * import sys from random import randint class rrap(QStandardItemModel): def __init__(self ,parent = None): QStandardItemModel.__init__(self,parent) self.d = QStandardItem(QString("asd")) self.d.se
74 2023-07-04
编程技术问答社区