首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSqlRelationalTableModel显示图标而不是数据

QSqlRelationalTableModel显示图标而不是数据
EN

Stack Overflow用户
提问于 2017-08-29 01:27:30
回答 1查看 93关注 0票数 0

我正在显示一个包含一个blob列(pdf文件)的表。我本来可以为用户隐藏该列,但是我想在列中显示一个图标,当它是一个文件时。我子类化了QsqlRealtionalTableModel并重载了数据函数。如下所示。我的问题是,现在图标与PDF中的混淆数据一起显示。我认为这个重载函数正在取代数据的图标。

代码语言:javascript
复制
QVariant RelationalTableModelWithIcon::data(const QModelIndex &item, int role) const
{
  if(item.column() == 3 && role == Qt::DecorationRole)
    {
      QSqlRecord r= record(item.row());
      QByteArray a= r.field(3).value().toByteArray();
      QIcon icon = QIcon(":/icons/Art/Icons/Iynque-Flat-Ios7-Style-Documents-Pdf.ico");
      if(a.isNull() == false)
        {
          return QVariant(icon);
        }
    }
  return QSqlRelationalTableModel::data(item,role);
}
代码语言:javascript
复制
DROP TABLE IF EXISTS `ComOper`.`documentsqueue` ;

CREATE TABLE IF NOT EXISTS `ComOper`.`documentsqueue` (
  `iddocumentsqueue` INT NOT NULL AUTO_INCREMENT,
  `iddocument` INT NULL DEFAULT 1,
  `name` VARCHAR(45) NOT NULL,
  `image` MEDIUMBLOB NULL,
  `dateEntered` DATE NULL,
  `dateExpired` DATE NULL,
  `dateApproved` DATE NULL,
  `notes` MEDIUMTEXT NULL,
  `archived` TINYINT NULL DEFAULT 0,
  `iddocType` INT NOT NULL DEFAULT 1,
  `idsupplier` INT NOT NULL,
  `idfacilities` INT NOT NULL DEFAULT 1,
  `idproducts` INT NOT NULL DEFAULT 1,
  `iduser` INT NOT NULL DEFAULT 1,
  PRIMARY KEY (`iddocumentsqueue`),
  CONSTRAINT `fk_documentsqueue_docType1`
    FOREIGN KEY (`iddocType`)
    REFERENCES `ComOper`.`docType` (`iddocType`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_documentsqueue_documents1`
    FOREIGN KEY (`iddocument`)
    REFERENCES `ComOper`.`documents` (`iddocument`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_documentsqueue_user1`
    FOREIGN KEY (`iduser`)
    REFERENCES `ComOper`.`user` (`iduser`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_documentsqueue_products1`
    FOREIGN KEY (`idproducts`)
    REFERENCES `ComOper`.`products` (`idproducts`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_documentsqueue_facilities1`
    FOREIGN KEY (`idfacilities`)
    REFERENCES `ComOper`.`facilities` (`idfacilities`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_documentsqueue_supplier1`
    FOREIGN KEY (`idsupplier`)
    REFERENCES `ComOper`.`supplier` (`idsupplier`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-29 02:27:12

为了避免显示不可读的PDF文本,您必须在他们请求Qt::DisplayRole角色时返回一个空字符串,当他们请求Qt::DecorationRole角色时返回图标。我还建议只在图标唯一的情况下阅读一次,如下所示:

*.h

代码语言:javascript
复制
private:
    QIcon icon;

*.cpp

代码语言:javascript
复制
RelationalTableModelWithIcon::RelationalTableModelWithIcon(QObject *parent, QSqlDatabase db):
    QSqlRelationalTableModel(parent, db)
{
    icon =  QIcon(":/icons/Art/Icons/Iynque-Flat-Ios7-Style-Documents-Pdf.ico");
}
QVariant RelationalTableModelWithIcon::data(const QModelIndex &index, int role) const
{
    if(index.column() == 3){
        if(role == Qt::DisplayRole)
            return "";
        else if ( role == Qt::DecorationRole)
            return icon;
    }
    return QSqlRelationalTableModel::data(index, role);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45929404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档