为什么我的视图不显示标题?
Why doesn't my view display headers?
这是一个从Qt教程复制的类:
class Window : public QWidget
{
Q_OBJECT
public:
Window();
void setSourceModel();
private slots:
void filterRegExpChanged();
void filterColumnChanged();
void sortChanged();
void addMail();
private:
QSortFilterProxyModel *proxyModel;
QStandardItemModel *model;
QGroupBox *sourceGroupBox;
QGroupBox *proxyGroupBox;
QTreeView *sourceView;
QTreeView *proxyView;
QCheckBox *filterCaseSensitivityCheckBox;
QCheckBox *sortCaseSensitivityCheckBox;
QLabel *filterPatternLabel;
QLabel *filterSyntaxLabel;
QLabel *filterColumnLabel;
QLineEdit *filterPatternLineEdit;
QComboBox *filterSyntaxComboBox;
QComboBox *filterColumnComboBox;
QPushButton* button;
};
这是一个定义函数:
Window::Window()
{
model = new QStandardItemModel(this);
//HEADERS ARE NOT DISPLAYED EVEN THOUGH I'M SETTING THEM HERE
model->setHeaderData(0, Qt::Horizontal, QObject::tr("Subject"));
model->setHeaderData(1, Qt::Horizontal, QObject::tr("Sender"));
model->setHeaderData(2, Qt::Horizontal, QObject::tr("Date"));
proxyModel = new QSortFilterProxyModel;
proxyModel->setDynamicSortFilter(true);
sourceView = new QTreeView;
sourceView->setRootIsDecorated(false);
sourceView->setAlternatingRowColors(true);
proxyView = new QTreeView;
proxyView->setRootIsDecorated(false);
proxyView->setAlternatingRowColors(true);
proxyView->setModel(proxyModel);
proxyView->setSortingEnabled(true);
connect(button,SIGNAL(clicked()),this,SLOT(addMail()));//THIS SEEMS NOT TO MAKE ANY DIFFERENCE - NOTHING IS ADDED
};
void Window::addMail()
{
model->insertRow(0);
model->setData(model->index(0, 0), "subject");
model->setData(model->index(0, 1), "sender");
model->setData(model->index(0, 2), "date");
}
void Window::setSourceModel()
{
proxyModel->setSourceModel(model);
sourceView->setModel(model);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Window window;
window.setSourceModel();
window.show();
return app.exec();
}
通过addMail添加的头和数据都不显示。为什么?
QAbstractItemModel::setHeaderData是用来处理用户对header的编辑,而不是通过编程方式进行设置。然后模型必须实现setHeaderData来处理那些编辑请求。QStandardItemModel显然不会创建头项,如果他们最初没有设置,所以什么也不会发生。
当您使用QStandardItemModel时,您应该使用setHorizontalHeaderItem或setHorizontalHeaderLabels(垂直变体也可用)来设置标题。
如果您查看文档,您会注意到setHeaderData有四个参数,最后一个是角色。角色默认为Qt::EditRole,但您可能需要Qt::DisplayRole。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 无法在 GLFW 窗口标题中显示'ä'
- 当鼠标悬停在 MFC C++ 中列表控件的列标题上时,可视显示工具提示
- 在 MFC C++中悬停列表控件的列标题的可视化显示工具提示
- 我的QT程序显示带有标题的空白窗口
- 无法设置和显示 QTabelView 水平标题
- 如何在RPi3上的交叉编译应用程序的主窗口上显示边框和标题栏
- QTreeView未显示标题
- c++builder-显示没有标题的字节数组颜色信息
- QTableView 显示列标题,但不显示数据
- 在窗口标题和消息框中显示错误的语言:win32应用程序,opengl
- 在GLFW窗口标题中显示FPS
- Opencv C++;在标题中使用int显示多个图像
- 为什么我的视图不显示标题?
- 标题名称不显示,背景颜色不改变
- 使控制台标题栏显示变量的值
- 电子邮件标题显示,dkim=硬失败(测试模式)和dkim=永久错误(坏信号)