меня интересовал вопрос.Поэтому я создал пустой проект с графическим интерфейсом и реализовал что-то вроде вашего первого примера.Кажется, мой код делает то, что вы хотите.Когда я щелкаю заголовок таблицы, QListView
элементы возвращаются.
Вы можете попробовать
mainwindow.h :
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void mySetupUi();
Ui::MainWindow *ui;
QSortFilterProxyModel *proxyModel;
QStandardItemModel *sourceModel;
QTableView *tableView;
QListView *listView;
};
mainwindow.cpp :
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
proxyModel(new QSortFilterProxyModel(this)),
tableView(new QTableView(this)),
listView(new QListView(this))
{
ui->setupUi(this);
sourceModel = getModel();
// set source model for proxy
proxyModel->setSourceModel(sourceModel);
tableView->setSortingEnabled(true);
// set proxy model for views
tableView->setModel(proxyModel);
listView->setModel(proxyModel);
mySetupUi();
}
void MainWindow::mySetupUi()
{
tableView->move(10, 15);
listView->move(300, 15);
tableView->adjustSize();
listView->adjustSize();
tableView->raise();
listView->raise();
}
инициализация модели (вы можете поместить ее рядом с конструктором главного окна):
QStandardItemModel* getModel()
{
QStandardItemModel *model = new QStandardItemModel();
model->setItem(0, 0, new QStandardItem("Alex"));
model->setItem(0, 1, new QStandardItem("Brown"));
model->setItem(0, 2, new QStandardItem("24"));
model->setItem(1, 0, new QStandardItem("Mike"));
model->setItem(1, 1, new QStandardItem("White"));
model->setItem(1, 2, new QStandardItem("19"));
model->setItem(2, 0, new QStandardItem("Ben"));
model->setItem(2, 1, new QStandardItem("Black"));
model->setItem(2, 2, new QStandardItem("22"));
return model;
}
Выглядит так жечто ты сделал.Но это работает.