Esempio n. 1
0
void MainWindow::focusInsideDockWidget(QObject *dockWidget)
{
	if (!dockWidget)
		return;

//	CX_LOG_CHANNEL_DEBUG("HELP_DB") << QString("    try mw::focus [%1](%2)")
//									   .arg(dockWidget->objectName())
//									   .arg(dockWidget->metaObject()->className());

	// focusing to docked widgets is required by the help system

	// Assume structure: QDockWidget->QScrollArea->QWidget,
	// as defined in MainWindow::addAsDockWidget()
	QDockWidget* dw = dynamic_cast<QDockWidget*>(dockWidget);
	if (!dw)
		return;
	if (dw->parent()!=this) // avoid events from other mainwindows
		return;
	QScrollArea* sa = dynamic_cast<QScrollArea*>(dw->widget());
	if (!sa)
		return;

	if (!sa->widget())
		return;

//	CX_LOG_CHANNEL_DEBUG("HELP_DB") << QString("    do mw::focus [%1](%2)")
//									   .arg(sa->widget()->objectName())
//									   .arg(sa->widget()->metaObject()->className());

	QTimer::singleShot(0, sa->widget(), SLOT(setFocus())); // avoid loops etc by send async event.
}
Esempio n. 2
0
void MainWindow::_addDockWidgets()
{
	if(!_updatePending)
		return ;
	
	for(size_t ii = 0 ; ii < _dockWidgets.size() ; ii++)
	{
		QWidget* widget = _dockWidgets[ii] ;
		Q_ASSERT(widget) ;
		if (widget->parent() != 0)
			return;
		QDockWidget* dockWidget = qobject_cast<QDockWidget*>(widget);
		if(!dockWidget) {
			dockWidget = new QDockWidget(this);
			dockWidget->setWidget(widget);
		}
		Qt::DockWidgetArea area = Qt::LeftDockWidgetArea; // = 0x1
		// area values are 0x1, 0x2, 0x4, 0x8
		while(!dockWidget->isAreaAllowed(area) && area <= 0x8)
			area=(Qt::DockWidgetArea)((int)area<<1);
		if (!(area&Qt::AllDockWidgetAreas)) {
			qDebug("%s",tr("No usable DockArea found for %1, using left one.").arg(
					dockWidget->windowTitle()).toAscii().constData());
			area = Qt::LeftDockWidgetArea;
		}
		QMainWindow::addDockWidget(area, dockWidget);
		Q_ASSERT(widget->parent() != 0);
		Q_ASSERT(dockWidget->parent() != 0);
	}
	_updatePending = false ;

}