- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我想要的是一个显示可选小部件的 qlistview(显示按钮的图像和文本的标签(小部件是一个基于 qwidget 的小部件,它具有带有 QLabel
和 QPushButton
的水平布局))。该模型应该为每个项目存储图像路径和按钮文本(这似乎不是问题)。我成功创建了一个 QListView 派生小部件,但它只显示第一个列表项(这是自定义小部件)并且它是不可选择的。我创建了一个自定义模型、 View 和委托(delegate),但我不知道该怎么做才能在所有列表项上显示小部件,而不仅仅是首先。
这是完整的源代码链接:SOURCE CODE LINK
我用 5 个小部件项目的列表和 1 个小部件项目的列表分别运行应用程序。而且我认为它添加了小部件,但它在第一个上重叠了所有小部件(5 个项目构建在按钮上有更密集的阴影):
列表中的 5 个小部件:
列表中的 1 个小部件:
如您所见,阴影有所不同。
这是代码的另一个副本:
Delegate.h Here is the code for the
delegate
:
#include <QtGui>
#include <QAbstractItemDelegate>
class WidgetDelegate : public QAbstractItemDelegate
{
public:
WidgetDelegate(QObject *parent = 0);
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const;
};
Delegate.cpp
#include <QtGui>
#include "Delegate.h"
#include "Profile.h"
WidgetDelegate::WidgetDelegate(QObject *parent)
: QAbstractItemDelegate(parent)
{ }
void WidgetDelegate::paint(QPainter */*painter*/,
const QStyleOptionViewItem &/*option*/,
const QModelIndex &/*index*/) const
{
}
QSize WidgetDelegate::sizeHint(const QStyleOptionViewItem &/*option*/,
const QModelIndex &/*index*/) const
{
return QSize(ProfileItem().geometry().width(), ProfileItem().geometry().height());
}
Model.h
#ifndef MODEL_H
#define MODEL_H
#include <QStringList>
#include <QAbstractListModel>
#include <QList>
#include "Profile.h"
class StringListModel : public QAbstractListModel
{
Q_OBJECT
public:
StringListModel(const QStringList &strings, QObject *parent = 0)
: QAbstractListModel(parent), stringList(strings) {}
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const;
private:
QStringList stringList;
};
#endif // MODEL_H
Model.cpp
#include "Model.h"
#include <QVariant>
int StringListModel::rowCount(const QModelIndex &/*parent*/) const
{
return stringList.count();
}
QVariant StringListModel::data(const QModelIndex &/*index*/,
int /*role*/) const
{
}
QVariant StringListModel::headerData(int /*section*/,
Qt::Orientation /*orientation*/,
int /*role*/) const
{
}
Prefs.h Widget containing the list view:
#ifndef PREFERENCES_H
#define PREFERENCES_H
#include "Model.h"
#include <QDialog>
class QPushButton;
class ProfileItem;
class QVBoxLayout;
class View;
class StringListModel;
class Preferences : public QDialog
{
public:
Preferences(QWidget *parent = 0);
private:
QVBoxLayout *m_pVerticalLayout;
View *myList;
QPushButton *button;
ProfileItem *item;
StringListModel *customModel;
};
#endif // PREFERENCES_H
Prefs.cpp
#include "Profile.h"
#include <QPixmap>
#include <QHBoxLayout>
#include <QBitmap>
#include <QMessageBox>
ProfileItem::ProfileItem(QWidget *parent) :
QWidget(parent)
{
pixmap = QPixmap(":/avatar");
m_avatarImageLabel.setPixmap(pixmap);
m_avatarImageLabel.setMask(pixmap.mask());
m_avatarTextButton.setText("Test");
connect(&m_avatarTextButton, SIGNAL(clicked()), this, SLOT(buttonPushed()));
m_pHorizontalLayout = new QHBoxLayout;
m_pHorizontalLayout->addWidget(&m_avatarImageLabel);
m_pHorizontalLayout->addWidget(&m_avatarTextButton);
setLayout(m_pHorizontalLayout);
}
void ProfileItem::setAvatarImage(const QString &avatarImage)
{
pixmap = QPixmap(avatarImage);
m_avatarImageLabel.setPixmap(pixmap);
m_avatarImageLabel.setMask(pixmap.mask());
}
void ProfileItem::setAvatarName(const QString &avatarName)
{
m_avatarTextButton.setText(avatarName);
}
void ProfileItem::buttonPushed()
{
QMessageBox msg;
msg.setText("Button was pushed!");
msg.exec();
}
Profile.h Widget that has to be used as list item
#ifndef PROFILEITEM_H
#define PROFILEITEM_H
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QPixmap>
class QHBoxLayout;
class ProfileItem : public QWidget
{
Q_OBJECT
public:
explicit ProfileItem(QWidget *parent = 0);
public slots:
void setAvatarImage(const QString &avatarImage);
void setAvatarName(const QString &avatarName);
void buttonPushed();
private:
QPixmap pixmap;
QLabel m_avatarImageLabel;
QPushButton m_avatarTextButton;
QHBoxLayout *m_pHorizontalLayout;
};
#endif // PROFILEITEM_H
Profile.cpp
#include "Profile.h"
#include <QPixmap>
#include <QHBoxLayout>
#include <QBitmap>
#include <QMessageBox>
ProfileItem::ProfileItem(QWidget *parent) :
QWidget(parent)
{
pixmap = QPixmap(":/avatar");
m_avatarImageLabel.setPixmap(pixmap);
m_avatarImageLabel.setMask(pixmap.mask());
m_avatarTextButton.setText("Test");
connect(&m_avatarTextButton, SIGNAL(clicked()), this, SLOT(buttonPushed()));
m_pHorizontalLayout = new QHBoxLayout;
m_pHorizontalLayout->addWidget(&m_avatarImageLabel);
m_pHorizontalLayout->addWidget(&m_avatarTextButton);
setLayout(m_pHorizontalLayout);
}
void ProfileItem::setAvatarImage(const QString &avatarImage)
{
pixmap = QPixmap(avatarImage);
m_avatarImageLabel.setPixmap(pixmap);
m_avatarImageLabel.setMask(pixmap.mask());
}
void ProfileItem::setAvatarName(const QString &avatarName)
{
m_avatarTextButton.setText(avatarName);
}
void ProfileItem::buttonPushed()
{
QMessageBox msg;
msg.setText("Button was pushed!");
msg.exec();
}
View.h
#ifndef VIEW_H
#define VIEW_H
#include <QListView>
class View : public QListView
{
public:
View();
void setModel(QAbstractItemModel *model);
QSize sizeHint();
};
#endif // VIEW_H
View.cpp
#include "View.h"
#include "Profile.h"
View::View()
{
viewport()->setAutoFillBackground(false);
setSelectionMode(QAbstractItemView::SingleSelection);
}
void View::setModel(QAbstractItemModel* model)
{
QListView::setModel(model);
for (int i = 0; i < 5; ++i)
{
QModelIndex index = model->index(i, 0);
ProfileItem* widget = new ProfileItem();
setIndexWidget(index, widget);
}
}
QSize View::sizeHint()
{
return QSize(ProfileItem().width(), ProfileItem().height());
}
QAbstractItemView::setIndexWidget
相关的任何内容我认为这是将小部件添加为 ListView 项的方法。
最佳答案
我认为小部件不是用 setIndexWidget 添加的,而是在委托(delegate)中创建的。
看一些例子:
http://doc.qt.digia.com/stable/itemviews-spinboxdelegate.html
http://www.qtforum.org/article/24195/qpushbutton-as-delegate-in-a-qtableview.html
In Qt, how do you properly implement delegates?
关于qt - QWidget 作为 View 项(Qt Model View Controller ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14742702/
我对 mongoosejs 中模型的使用感到有些困惑。 可以通过这些方式使用 mongoose 创建模型 使用 Mongoose var mongoose = require('mongoose');
我正在看 from django.db import models class Publisher(models.Model): name = models.CharField(max_len
我有自己的 html 帮助器扩展,我用这种方式 model.Reason_ID, Register.PurchaseReason) %> 这样声明的。 public static MvcHtmlS
假设模型原本是存储在CPU上的,然后我想把它移到GPU0上,那么我可以这样做: device = torch.device('cuda:0') model = model.to(device) # o
我过去读过一些关于模型的 MVC 建议,指出不应为域和 View 重用相同的模型对象;但我找不到任何人愿意讨论为什么这很糟糕。 我认为创建两个单独的模型 - 一个用于域,一个用于 View - 然后在
我正在使用pytorch构建一个像VGG16这样的简单模型,并且我已经重载了函数forward在我的模型中。 我发现每个人都倾向于使用 model(input)得到输出而不是 model.forwar
tf.keras API 中的 models 是否多余?对于某些情况,即使不使用 models,代码也能正常运行。 keras.models.sequential 和 keras.sequential
当我尝试使用 docker 镜像运行 docker 容器时遇到问题:tensorflow/serving。 我运行命令: docker run --name=tf_serving -it tensor
我有一个模型,我用管道注册了它: register_step = PythonScriptStep(name = "Register Model",
如果 View 需要访问模型中的数据,您是否认为 Controller 应: a)将模型传递给 View b)将模型的数据传递给 View c)都不;这不应该是 Controller 所关心的。让 V
我正在寻找一个可以在模型中定义的字段,该字段本质上是一个列表,因为它将用于存储多个字符串值。显然CharField不能使用。 最佳答案 您正在描述一种多对一的关系。这应该通过一个额外的 Model 进
我最近了解了 Django 中的模型继承。我使用很棒的包 django-model-utils 取得了巨大的成功。我继承自 TimeStampedModel 和 SoftDeletableModel。
我正在使用基于 resnet50 的双输出模型进行项目。一个输出用于回归任务,第二个输出用于分类任务。 我的主要问题是关于模型评估。在训练期间,我在验证集的两个输出上都取得了不错的结果: - 综合损失
我是keras的新手。现在,我将使用我使用 model.fit_generator 训练的模型来预测测试图像组。我可以使用 model.predict 吗?不确定如何使用model.predict_g
在 MVC 应用程序中,我加入了多个表并将其从 Controller 返回到 View,如下所示: | EmployeeID | ControlID | DoorAddress | DoorID |
我在使用 sails-cassandra 连接系统的 Sails 中有一个 Data 模型。数据。 Data.count({...}).exec() 返回 1,但 Data.find({...}).e
我正在使用 PrimeFaces dataTable 开发一个 jsf 页面来显示用户列表。用户存储在 Model.User 类的对象中。
我正在关注https://www.tensorflow.org/tutorials/keras/basic_classification解决 Kaggle 挑战。 但是,我不明白应该将什么样的数据输入
我是这个领域的新手。那么,你们能帮忙如何为 CNN 创建 .config 文件吗? 传递有关如何执行此操作的文档或教程将对我有很大帮助。谢谢大家。 最佳答案 这个问题对我来说没有多大意义,因为 .co
我是“物理系统建模”主题的新手。我阅读了一些基础文献,并在 Modelica 和 Simulink/Simscape 中做了一些教程。我想问你,如果我对以下内容理解正确: 符号操作是将微分代数方程组(
我是一名优秀的程序员,十分优秀!