В общем попробую обрисовать ситуацию. Открывается файл. Создается виджет-редактор, помещается во вкладку.
На сигнал currentChanged(int) tabWidget'а повешен слот. В этом слоте для объекта treeView ставится модель. Модель благополучно ставится. Внимание странное поведение - код:
void MainWindow::changeCurrentArchive(ArchiveView * newView)
{
if (newView) {
handler->setCurrentArchiveView(newView);
ui->treeView->setModel(handler->proxy());
ui->treeView->sortByColumn(0, Qt::AscendingOrder);
ui->treeView->resizeColumnToContents(0);
ui->treeView->hideColumn(1);
ui->treeView->hideColumn(2);
ui->treeView->hideColumn(3);
}
Все строки по изменению состояния модели (прятанье колонок и тп) НЕ ОТРАБАТЫВАЮТ.
Если сделать Qt::QueuedConnection на сигнал, то тогда сработает... Где я не о5 прав?
весь код:
connect(ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(changeTab(int))/*, Qt::QueuedConnection*/);
void MainWindow::open(const QString & path)
{
qDebug() << "open";
QString fileName = path;
if (fileName == "")
fileName = QFileDialog::getOpenFileName(this, tr("Select Archive File"), currentFile);
if (fileName == "")
return;
openInTab(fileName);
currentFile = fileName;
appendCurrentFile(fileName);
setArchiveActionsEnabled(true);
qDebug() << "test";
//тут уже работает!!!!
// ui->treeView->sortByColumn(0, Qt::AscendingOrder);
// ui->treeView->hideColumn(1);
}
void MainWindow::openInTab(const QString & path)
{
qDebug() << "MainWindow::openInTab";
manager->open(path);
QMPQAbstractEditor * editor = manager->getEditor(path);
if (editor) {
ui->tabWidget->addTab(editor, QFileInfo(path).fileName()); //тут эмит сигнала
ui->tabWidget->setCurrentWidget(editor);
editor->open(path);
}
}
void MainWindow::changeTab(int index)
{
qDebug() << "MainWindow::changeTab";
QMPQAbstractEditor * editor = qobject_cast<QMPQAbstractEditor *>(ui->tabWidget->widget(index));
Q_ASSERT(editor);
ArchiveView * view = qobject_cast<ArchiveView *>(editor);
if (view)
changeCurrentArchive(view);
disconnect(editor, 0, this, 0);
}
"трейс":
open
MainWindow::openInTab
MainWindow::changeTab
MainWindow::changeCurrentArchive
test