Macにファイルを保存すると、パネルが一番上のバーから下に降りてきて、本当にクールな方法で表示されます。 Qtフレームワークを使って同様のことをするクラスを作成したいと思います。私が混乱していることがいくつかあります:QMainWindowのMenubarの下部に「降下パネル」を添付する方法
親ウィンドウへの入力をブロックする必要があります。これはsetModal()メソッドを持っているので、QDialogでは簡単ですが、 - QDialogsはデフォルトで飛び出します。私はこれを回避する方法がわかりません。
QMainProjectには、QMenua DescendingPanelクラスの新しいインスタンスが作成されます。メニューバーの下に他のウィジェットがあるとしたら、どうしたらいいでしょうか? DescendingPanelがその上に表示されます。
本当にありがとうございます。
EDITは、私の代わりに、メニューバーの下にダイアログをペッグの、ちょうどそれが下に表示させると、窓枠を削除する考えを持っていました。そうすれば、それがそこの下から飛び出したという錯覚を与えるでしょう。もちろん、移動イベントも処理しなければならないので、ダイアログは常にメニューバーの下にありますが、それは後で行います。ここでは、メニューバーの下に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を返したため。
私はちょうど考えがありました。 QToolbarの下部にダイアログをペグするのではなく、QMainMindowが画面上を移動してもツールバーの下に常にパネルが表示されるように、相対的な方法で座標を設定しようとする可能性があります。私はそれを実装できるかどうかを見極めるつもりです。それがうまくいけば、残っているのはグラスフレーム(最大化ボタン、最小化ボタン、および閉じるボタンが含まれているもの)を取り除くことだけです。それらを削除すると、ダイアログは実際は別のウィンドウです。 –
私は上記のことをやってみましたが、ツールバーのすぐ下にダイアログが表示されません。私はpos()を使ってツールバーの位置を取得し、ツールバーを基準にしてダイアログの位置を設定しましたが、ほとんどの場合、中心から離れたように見えました。 –
mapToGlobalメソッドを使用しましたか? posは親の位置に関連して返ることを覚えておいてください。 –