Когда вы сохраняете файл на Mac, панель как бы спускается с верхней панели очень круто. Я хочу создать класс, который делает похожую вещь, используя фреймворк Qt. Я запутался в нескольких вещах:
Когда панель опускается, ввод в родительское окно должен быть заблокирован. Это легко сделать с QDialog, так как он имеет метод setModal (), однако - QDialogs, по умолчанию всплывающее окно. Я не уверен, как обойти это.
В QMainProject существует QMenua, создается новый экземпляр класса DescendingPanel. Как бы вы это сделали, если предположить, что есть другие виджеты под меню. Над ними должна появиться DescendingPanel.
Я был бы очень признателен за любую помощь в этом.
EDIT
У меня была идея, что вместо того, чтобы привязывать диалог под меню, просто сделайте так, чтобы он появился под ним, и удалите оконную раму. Таким образом, это создаст иллюзию, что он выскочит из-под ног. Конечно, события Move также должны обрабатываться так, чтобы диалог всегда был под строкой меню, но это на потом. Вот код, который я использовал для отображения DescendingDialog под строкой меню.
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();
}
};
Это не сработало, потому что GlobalLocationOfMenu.x () и .y () вернули 0, поэтому диалоговое окно не появляется там, где я хочу.