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

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

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

Сообщений: 345


Просмотр профиля
« : Июнь 20, 2014, 10:07 »

Здравствуйте как отследить текущее активное окно
у меня есть два окна: treeviewи treeview2
так вот как мне отследить какое окно активно при переключении по ним мышкой.
метод isActiveWindow не помогает.
в обоих Тривиевах представлена файловая система, но мне нужно остледить не клик по дереву файловой системы ,а просто переключение между окнами.

Код:
void MainWindow::activazia(int okno)   
{
    if (ui->treeView_2->isActiveWindow())  // ЕУМЙ БЛФЙЧЕО МЕЧЩК ФТЙЧЙЕЧ
    {
        msg.setText(QString::fromLocal8Bit("Активно правое окно"));
        msg.exec();
    }
    if (ui->treeView->isActiveWindow())
    {
        msg.setText(QString::fromLocal8Bit("активно левое окно"));
        msg.exec();
    }

Код:
void MainWindow::pushbutton_clicked()
{
    activazia(0);
}
Вот метод который вызывается при клике на кнопку Button которая на форме
Сначало я активирую левое окно нажимаю кнопку но выполняется условие

Код:
msg.setText(QString::fromLocal8Bit("Активно правое окно"));
msg.exec();

, а должно выполняться условие
Код:
msg.setText(QString::fromLocal8Bit("Активно левое окно"));
msg.exec();

Вообщем почему то всегда у меня активно правое окно почему не знаю
« Последнее редактирование: Июнь 20, 2014, 10:27 от koldun90 » Записан
carrygun
Гость
« Ответ #1 : Июнь 20, 2014, 10:18 »

А hasFocus() пробовали?
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #2 : Июнь 20, 2014, 10:25 »

Код:
hasfocus()
вообще не срабатывает

заместо
Код:
isActiveWindow()
что еще можно попробовать

Еще вопрос а возможно как то treeview вывести модель файловой системы + подключенные сменные носитель( флешки) в linux


те чтоб было вот так
+"/"
+(подключенная флешка(метка тома))

Просто когда отображаешь qfilesystemmodel в windows7 то он отображает изначально как бы подключенные носители
,а если допустим в линуксе то он выводит только каталог "/" (чисто все файловую систему)
« Последнее редактирование: Июнь 20, 2014, 10:32 от koldun90 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июнь 20, 2014, 10:33 »

isActiveWindow сработает для окна но не виджета внутри. Используйте hasFocus() или viewport().hasFocus() (один из них должен сработать Улыбающийся)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Июнь 20, 2014, 10:37 »

Код
C++ (Qt)
QApplication::focusWidget()->window();
Записан

Qt 5.11/4.8.7 (X11/Win)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #5 : Июнь 20, 2014, 10:46 »

Вообщем проблему решил так
Код:
void mytreeview::mousePressEvent(QMouseEvent *event)    //при нажатии пкм
{

    if (event->button() == Qt::RightButton)
    {
       emit sg();
    }
    else
    {
        //при нажатии лкм
        emit activation(1); // мы собственно испускаем сигнал который активирует слот activazia
        QTreeView::mousePressEvent(event);

    }
}

Код:
void MainWindow::activazia(int okno)   
{
    if (ui->treeView_2->hasafocus())  // ЕУМЙ БЛФЙЧЕО МЕЧЩК ФТЙЧЙЕЧ
    {
        msg.setText(QString::fromLocal8Bit("Активно правое окно"));
        msg.exec();
    }
    if (ui->treeView->hasafocus())
    {
        msg.setText(QString::fromLocal8Bit("активно левое окно"));
        msg.exec();
    }
поэтому собственно глюк был втом метод activazia запусклся по нажатию на кнопку а я просто переопределил mousePressEvent и вроде hasfocus корректно работает при нажатии на левый тривиев и на правый тривиев
« Последнее редактирование: Июнь 20, 2014, 10:50 от koldun90 » Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #6 : Июнь 20, 2014, 10:52 »

А по поводу второго вопроса можете помочь как отобразить файловую систему не толmrj корень "/"
а еще и подключены съемные носители подскажите в какую сторону нужно копать ? что переопределять и тд? Чтоб файловую ситему отображало примерно как в винде
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Июнь 20, 2014, 11:04 »

Зависит от того что за "окно" имеется ввиду. Если это само QTreeWidget - то hasFocus, если "то окно в котором QTreeWidget то window()->isActivеWindow(). И неясно зачем это искать - если Вы получили mousePressEvent то фокус на нем уже и стоит и его окно активно. И "активазия" может случиться не только по мыше, поэтому лучше перекрывать focusInEvent/focusOutEvent 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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