Cuando guarda un archivo en una Mac, un panel desciende un poco desde la barra superior de una manera realmente genial. Quiero crear una clase que haga algo similar usando el marco Qt. Hay una serie de cosas que estoy confundido acerca de:Cómo colocar un 'panel descendente' en la parte inferior de la barra de menú en QMainWindow
Cuando el panel desciende, entrada a la ventana padre debe ser bloqueado. Sin embargo, esto es fácil con QDialog, ya que tiene el método setModal() - QDialogs, por defecto pop-out. No estoy seguro de cómo solucionar esto.
En QMainProject, se crea una nueva instancia QMenua de la clase DescendingPanel. ¿Cómo lo harías, suponiendo que haya otros widgets debajo de la barra de menú? The DescendingPanel debería aparecer encima de ellos.
Realmente agradecería cualquier ayuda con esto.
EDITAR
tenía una idea de que en lugar de vincular el cuadro de diálogo bajo la barra de menú, simplemente hacer que aparece debajo de allí y retire el marco de la ventana. De esa forma, daría la ilusión de que surgió desde allí. Por supuesto, los eventos Move también deberían manejarse de manera que el diálogo esté siempre debajo de la barra de menú, pero eso es para más tarde. Este es el código que utilicé para que aparezca el DescendingDialog debajo de la barra de menú.
class DescendingDialog : public QWidget
{
QMainWindow* Window;
QWidget* Menu;
QPoint GlobalLocationOfMenu;
int DialogWidth;
int DialogHeight;
int X()
{
int XDistanceOfPanel = GlobalLocationOfMenu.x() + ((Menu->width()/2) - (this->DialogWidth/2));
//GlobalLocationOfMenu.x() returns 0;
return XDistanceOfPanel;
}
int Y()
{
int YDistanceOfPanel = GlobalLocationOfMenu.y()+Menu->height();
//GlobalLocationOfMenu.y() returns 0;
return YDistanceOfPanel;
}
void SetGeometry()
{
this->setGeometry(this->X(),this->Y(),this->DialogWidth,this->DialogHeight);
}
public:
DescendingDialog(QMainWindow* Window,int DialogWidth,int DialogHeight):QWidget(NULL)
{
this->Window = Window;
this->Menu = this->Window->menuWidget();
this->DialogWidth = DialogWidth;
this->DialogHeight = DialogHeight;
QPoint RelativeLocationOfMenu = this->Menu->pos();
this->GlobalLocationOfMenu = QWidget::mapToGlobal(RelativeLocationOfMenu);
this->SetGeometry();
}
};
No funcionó porque el GlobalLocationOfMenu.x() y .y() devuelve 0 por lo que no aparece el cuadro de diálogo donde yo quiero que haga.
Solo tenía una idea. En lugar de vincular el diálogo a la parte inferior de la barra de herramientas de QTool, podría tratar de establecer sus coordenadas de una manera relativa para que el panel siempre aparezca debajo de la barra de herramientas, incluso si QMainMindow se mueve en la pantalla. Voy a ver si puedo implementar eso. Si funciona, todo lo que quedará será eliminar el Marco de Cristal (el que contiene los botones maximizar, minimizar y cerrar); eliminarlos disimularía el hecho de que el diálogo es, de hecho, una ventana separada. –
He intentado hacer lo anterior, pero no puedo hacer que el cuadro de diálogo aparezca justo debajo de la barra de herramientas. Obtuve la ubicación de la barra de herramientas usando pos() y establecí la posición del cuadro de diálogo relativo a la barra de herramientas, pero en la mayoría de los casos parecía fuera del centro. –
usaste los métodos mapToGlobal? recuerde que pos devolverá en relación con la posición padre –