2011-12-04 15 views
2

これは、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のDEFである:addMail介して添加

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(); 
} 

どちらのヘッダーもデータが表示されます。どうして?

答えて

-1

ドキュメントを見ると、setHeaderDataは4つのパラメータをとり、最後のものはロールであることに注意してください。 ロールのデフォルトはQt :: EditRoleですが、おそらくQt :: DisplayRoleが必要です。

+0

時計のデフォルト値 – beyrem

4

QAbstractItemModel :: setHeaderDataは、プログラムによる設定ではなく、ヘッダーのユーザーによる編集を処理するためのものです。モデルは、これらの編集要求を処理するためにsetHeaderDataを実装する必要があります。 QStandardItemModelは、最初に設定されていない場合はヘッダ項目を作成しないため、何も起こりません。

QStandardItemModelを使用している場合は、setHorizontalHeaderItemまたはsetHorizontalHeaderLabels(縦書きバリアントも使用可能)を使用してヘッダーを設定する必要があります。

関連する問題