4

フレームレスウィンドウとして、デフォルトのウィンドウ境界なしでQt-Applicationを構築しています。ウィンドウ関数は、次のようにQMainWindowでウィンドウフラグを設定することで含まれます。

    MainDialog::MainDialog(QWidget *parent):
        QMainWindow(parent), currentProject(NULL), currentUser(NULL),
        aViews(new QList<AViewForm*>()),
        bViews(new QList<BViewForm*>()),
        cViews(new QList<CViewForm*>())
    {

        ui.setupUi(this);
        this->statusBar()->showMessage(tr(""));
        this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint |  Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowSystemMenuHint);

        ...
     }

MainWindowには.uiファイルが含まれているため、QDesktopWidgetから継承できません。私が今抱えている問題は、最大化するときにアプリケーションがWindowsタスクバーをオーバーレイすることです。

今の私の質問:OSデスクトップの利用可能な高さを見つける可能性はありますか?

availableGeometry().height()

-QDesktopWidgetのメソッド?ドキュメントに何も見つかりません:(

ここにいる他の誰かが同様の質問をしましたが、QMainWindowの代わりにQWidgetを使用しました。

私の問題へのヒントがあれば嬉しいです

4

2 に答える 2

4

あなたが言うように、QDesktopWidget を使用できます。クラスを継承していない場合は、高さを取得するためだけにコンストラクターで作成できます。

QDesktopWidget w;
int availableHeight = w.availableGeometry().height();
于 2011-09-01T13:38:59.520 に答える
3

それは良い習慣ではないと思いますが、次のように解決しました:

MainWindow をパラメーターとして必要とし、スケーリング アクション用のスロットを備えた新しいクラスを作成しました。

FullScreen::FullScreen(QMainWindow &mainWindow, QObject *parent) : QObject(parent), mainWindow(mainWindow)
{
    this->saveCurrentPosition();
}
void FullScreen::maximize()
{
    this->saveCurrentPosition();
     mainWindow.move(QApplication::desktop()->mapToGlobal(QApplication::desktop()->availableGeometry().topLeft()));
     mainWindow.resize(QApplication::desktop()->availableGeometry().size()); 
}

void FullScreen::normalize()
{

    mainWindow.move(lastGlobalPosition);
    mainWindow.resize(lastSize);
}

void FullScreen::saveCurrentPosition()
{
    lastGlobalPosition = mainWindow.mapToGlobal(mainWindow.rect().topLeft());
    lastSize = mainWindow.size();
}

現在発生している唯一の問題は、アプリケーションがフルスクリーンで、タスクバーを移動した場合です。私はresizeEventを設定していません

于 2011-09-02T07:05:18.827 に答える