Russian Qt Forum
Ноябрь 26, 2024, 11:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: connect  (Прочитано 1971 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« : Ноябрь 14, 2009, 00:20 »

В общем попробую обрисовать ситуацию. Открывается файл. Создается виджет-редактор, помещается во вкладку.
На сигнал 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 22.