Почему мой вид не отображает заголовки? - PullRequest
2 голосов
/ 04 декабря 2011

Это класс, скопированный из руководств 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;
};  

Это определение ctor:

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.Почему?

Ответы [ 2 ]

5 голосов
/ 04 декабря 2011

QAbstractItemModel :: setHeaderData предназначен для обработки пользовательских изменений заголовка, а не для их программной настройки. Затем модель должна реализовать setHeaderData для обработки этих запросов на редактирование. QStandardItemModel, очевидно, не создает элементы заголовка, если они не были установлены изначально, поэтому ничего не происходит.

Поскольку вы используете QStandardItemModel, вы должны использовать setHor horizontalHeaderItem или setHor horizontalHeaderLabels (также доступны вертикальные варианты) для настройки заголовка.

0 голосов
/ 04 декабря 2011

Если вы посмотрите на документацию, вы заметите, что setHeaderData принимает четыре параметра, причем последний является ролью. Роль по умолчанию - Qt :: EditRole, но вы, вероятно, хотите Qt :: DisplayRole.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...