Название: Как отслеживать активное окно в 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
Спасибо за помощь :)
|