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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отслеживать активное окно в QDockWidget ?  (Прочитано 4451 раз)
Sahsa
Гость
« : Сентябрь 20, 2015, 10:48 »

Ребята, у меня такой вопрос.
В программе создается несколько окон QDockWidget и ToolBar для них. Как отслеживать активное окно QDockWidget что-бы ToolBar работал с каждым окном, а не с последним созданным?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Сентябрь 20, 2015, 11:25 »

Проверять на hasFocus()?
Записан

Sahsa
Гость
« Ответ #2 : Сентябрь 20, 2015, 11:47 »

Проверять на hasFocus()?

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

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Сентябрь 20, 2015, 14:06 »

Проверять на hasFocus()?

а хоть какие примеры?


Не знал, что hasFocus() не работает для dock )
Накидал такой простенький пример. Активное dock-окно -- то, по которому мы тыкнули.

Код
C++ (Qt)
#include <QDockWidget>
#include <QTextEdit>
#include <QAction>
 
class MyMainWindow : public QMainWindow
{
   Q_OBJECT
 
public:
   MyMainWindow() {
       te = new QTextEdit();
       te->setText("Yooh!");
 
       setCentralWidget(te);
 
       dw1 = new QDockWidget();
       dw2 = new QDockWidget();
       dw3 = new QDockWidget();
 
       dw1->installEventFilter(this);
       dw2->installEventFilter(this);
       dw3->installEventFilter(this);
 
       currentDockWidget = 0;
 
       addDockWidget(Qt::LeftDockWidgetArea, dw1);
       addDockWidget(Qt::RightDockWidgetArea, dw2);
       addDockWidget(Qt::RightDockWidgetArea, dw3);
 
       actionSetWindowTitleDock = new QAction("SetWindowTitleDock", this);
       connect(actionSetWindowTitleDock, SIGNAL(triggered()), SLOT(setWindowTitleDoc()));
 
       mainToolBar = addToolBar("main");
       mainToolBar->addAction(actionSetWindowTitleDock);
   }
 
private:
   QAction * actionSetWindowTitleDock;
 
   QToolBar * mainToolBar;
 
   QTextEdit * te;
 
   QDockWidget *dw1;
   QDockWidget *dw2;
   QDockWidget *dw3;
 
   QDockWidget * currentDockWidget;
 
private slots:
   void setWindowTitleDoc() {
       if (currentDockWidget)
           currentDockWidget->setWindowTitle(te->toPlainText());
   }
 
protected:
   bool eventFilter(QObject * obj, QEvent * e) {
       if (obj == dw1 || obj == dw2 || obj == dw3) {
           if (e->type() == QEvent::MouseButtonPress) {
               currentDockWidget = qobject_cast <QDockWidget *> (obj);
               return true;
           }
       }
 
       return QMainWindow::eventFilter(obj, e);
   }
};
 
Записан

Sahsa
Гость
« Ответ #4 : Сентябрь 20, 2015, 17:12 »

Спасибо за помощь Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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