Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Sahsa от Сентябрь 20, 2015, 10:48



Название: Как отслеживать активное окно в QDockWidget ?
Отправлено: Sahsa от Сентябрь 20, 2015, 10:48
Ребята, у меня такой вопрос.
В программе создается несколько окон QDockWidget и ToolBar для них. Как отслеживать активное окно QDockWidget что-бы ToolBar работал с каждым окном, а не с последним созданным?


Название: Re: Как отслеживать активное окно в QDockWidget ?
Отправлено: gil9red от Сентябрь 20, 2015, 11:25
Проверять на hasFocus()?


Название: Re: Как отслеживать активное окно в QDockWidget ?
Отправлено: Sahsa от Сентябрь 20, 2015, 11:47
Проверять на hasFocus()?

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


Название: Re: Как отслеживать активное окно в QDockWidget ?
Отправлено: gil9red от Сентябрь 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);
   }
};
 


Название: Re: Как отслеживать активное окно в QDockWidget ?
Отправлено: Sahsa от Сентябрь 20, 2015, 17:12
Спасибо за помощь :)