Проверять на 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);
}
};