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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: вопрос по connect  (Прочитано 3846 раз)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« : Октябрь 13, 2014, 14:00 »

Здравствуйте есть QfileSystemModel(файловая система) представленная в QListView QTreeView QTableView
вообщем есть коннекты
Код:
connect(ui->treeview->selectionModel(),SIGNAL(currentChanged(QModelIndex,QModelIndex)),SLOT(smenaindeksa(QModelIndex,QModelIndex)));
 connect(ui->treeview_2->selectionModel(),SIGNAL(currentChanged(QModelIndex,QModelIndex)),SLOT(smenaindeksa(QModelIndex,QModelIndex)));
connect(ui->tableview->selectionModel(),SIGNAL(currentChanged(QModelIndex,QModelIndex)),SLOT(smenaindeksa(QModelIndex,QModelIndex)));
 connect(ui->tableview_2->selectionModel(),SIGNAL(currentChanged(QModelIndex,QModelIndex)),SLOT(smenaindeksa(QModelIndex,QModelIndex)));
connect(ui->listView_3->selectionModel(),SIGNAL(currentChanged(QModelIndex,QModelIndex)),SLOT(smenaindeksa(QModelIndex,QModelIndex)));
 connect(ui->listView_4->selectionModel(),SIGNAL(currentChanged(QModelIndex,QModelIndex)),SLOT(smenaindeksa(QModelIndex,QModelIndex)));

коннекты соответственно срабатывают при смене индекса в отображении


Код:
public slots:

    void smenaindeksa(QModelIndex,QModelIndex);
собственно слот который обрабатывает сигнал  currentChanged

Код:
void MainWindow::smenaindeksa(QModelIndex index1, QModelIndex index2)  

    if (vybor==2)   // значит мы выбрали с помощью мыши
    {

    }
    if (vybor==1)  // выбрали коннект с помощью стрелочек
        if (tekokno==1)  //текущее окно центральное
        {

            if (elemaktiven==1) 
            {
                on_treeView_pressed(index1);
            }
            if (elemaktiven==2) 
            {
                on_tableView_pressed(index1);
            }
            if (elemaktiven==3) /
            {
                on_listView_3_pressed(index1);
            }
        }
        if (tekokno==2)  //ЕУМЙ БЛФЙЧОП РТБЧПЕ ПЛОП
        {
            if (elemaktiven==4)
            {
                on_treeView_2_pressed(index1);
            }
            if (elemaktiven==5) //
            {
                on_tableView_2_pressed(index1);
            }
            if (elemaktiven==6) //
            {
                on_listView_4_pressed(index1);
            }
        }
    }
}

Соответсвенно keypressEvent переопределен у всех 3 классов mytreeview mylistview mytableview


Код:
void mylistview::keyPressEvent(QKeyEvent *event)    // РЕТЕПРТЕДЕМЕОЙЕ ЪБЦБФЙС ЛМБЧЙЫЙ (УПВЩФЙЕ РТЙ ОБЦБФЙЙ ОБ ЛМБЧЙЫЙ
{
if (event->key()==Qt::Key_Up | event->key()==Qt::Key_Down | event->key()==Qt::Key_Left | event->key()==Qt::Key_Right)
    {
        vybor=1; // устанавливаем переменную в единицу значит мы меняем индекс с помощью стрелок
    }
    QListView::keyPressEvent(event);

}

соответственно установлены фильтры
Код:
 ui->listView_3->viewport()->installEventFilter(this);
    ui->listView_4->viewport()->installEventFilter(this);

Код:
bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
if (mouseEvent->button()==Qt::LeftButton)
            {
                vybor=2;  // РЕТЕЛМАЮЕОЙЕ РТПЙУИПДЙФ РПУТЕДУФЧПН НЩЫЙ
                return false;
            }
}
в случае клика мышкой представлению мы устанавливаем переменную в  двойку

проблема в том что в выводе приложения
пишет следующее
Код:
QObject::connect: Cannot connect (null)::currentChanged(QModelIndex,QModelIndex) to MainWindow::smenaindeksa(QModelIndex,QModelIndex)
QObject::connect: Cannot connect (null)::currentChanged(QModelIndex,QModelIndex) to MainWindow::smenaindeksa(QModelIndex,QModelIndex)
QObject::connect: Cannot connect (null)::currentChanged(QModelIndex,QModelIndex) to MainWindow::smenaindeksa(QModelIndex,QModelIndex)
QObject::connect: Cannot connect (null)::currentChanged(QModelIndex,QModelIndex) to MainWindow::smenaindeksa(QModelIndex,QModelIndex)

Итого получается что из 6 коннектов 4 не проходит
Как решить проблему?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Октябрь 13, 2014, 14:04 »

Похоже, у кого-то из QListView, QTreeView, QTableView selectionModel() возращает пустой указатель
Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #2 : Октябрь 13, 2014, 14:08 »

а как можно решить проблему подскажите?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Октябрь 13, 2014, 14:36 »

а как можно решить проблему подскажите?

Проверьте сначала мое предположение, если я не угадал, тогда подумаем над другими вариантами Улыбающийся
Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #4 : Октябрь 13, 2014, 15:13 »

у меня коннекты прописаны в конструкторе mainwindow.cpp
и сразу после того как я программу запустил(даже в ней еще ничего не делал)
появляются эти сообщения о коннектах....
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #5 : Октябрь 13, 2014, 15:19 »

и подскажите как проверитЬ...
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #6 : Октябрь 13, 2014, 15:38 »

Код:
    QItemSelectionModel *md1=ui->treeView->selectionModel();
    QItemSelectionModel *md2=ui->treeView_2->selectionModel();
    QItemSelectionModel *md3=ui->tableView->selectionModel();
    QItemSelectionModel *md4=ui->tableView_2->selectionModel();
    QItemSelectionModel *md5=ui->listView_3->selectionModel();
    QItemSelectionModel *md6=ui->listView_4->selectionModel();

    QModelIndex r=md1->currentIndex();
после загрузки проги я  выполняю данный код по нажатию на обычную кнопку и прога валитсяна строке

Код:
QModelIndex r=md1->currentIndex();

Объясню у меня файл менеджер
соответственно два окна (всего 6 видов отображений по 3 в каждом окне)

левое                             правое
Значки-listview_3                 Значки-listview_4                
Таблица-tableview            Таблица-tableview_1
Дерево- qtreeview            Дерево- qtreeview_1

Соответственно при запуске отображается по одному окну это там зависит от настроек ну допустим может отобразиться так

левое                               правое
Дерево- qtreeview              Дерево- qtreeview_1

а соответственно остальные четыре представления будут setVisible(false)
но после запуска проги там можно изменить формат отображения как в левом так и в правом окне

те в проге активны всегда активны только 2 формата отображения( по одному на каждой стороне) а всего их 6 ( по 3 с каждой стороны)
« Последнее редактирование: Октябрь 13, 2014, 15:57 от koldun90 » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Октябрь 13, 2014, 17:21 »

и подскажите как проверитЬ...

Например:
qDebug() << ui->treeView->selectionModel();

Если вернет 0, или 0х0, значит пустой указатель
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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