5

基本的に、PySide と Qt Framework を使用して GUI アプリを作成したいと考えています。QT デザイナーを使用して初期の UI デザインを作成しています。アプリの最初のバージョンは Mac で実行されます。他の Mac アプリケーションのように、アプリの名前が太字で左側に「概要」、「設定」、「終了」と表示されるようにしたいと考えています。 .

問題は、これらのタイプの文字列を追加するたびに、ドロップダウンが機能しなくなることです。

これに関するヒントは役に立ちます。これは、PySide、QT Framework、および QT Designer を使用した初めての GUI です。

4

2 に答える 2

5

About以下は、 C++のMacでメニュー項目を正しく機能させる例です。重要なsetMenuRoleのは正しい役割をすることです。Quit、About、Preferences、AboutQtの役割があります。アプリケーション名が太字のメニュー項目はOSから提供されているので、特別なことをする必要はありません。Qtは、正しい役割を持つアイテムをそれらが属する場所に自動的に移動します。[終了]メニュー項目を取得するために何もする必要はありません。提供しない場合は自動的に追加されます。

Qt Designerでメニューを作成している場合はmenuRole、それらのメニューQActionsのプロパティを設定するだけです。メニューが正しい場所に移動するために必要なのはこれだけです。アプリケーションの名前でメニューを追加しないでください。通常のWindowsスタイルのメニュー([ファイル]、[編集]、[ヘルプ])を作成するだけで、アイテムが役割に合わせて適切に再配置されます。

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    a.setApplicationVersion(...);
    a.setOrganizationName(...);
    a.setOrganizationDomain(...);
    a.setApplicationName(...);

    MainWidget w; // MainWidget is your widget class

    QMessageBox * aboutBox = new QMessageBox(&w);
    QImage img(":/images/youricon.png");
    aboutBox->setIconPixmap(QPixmap::fromImage(
        img.scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
    QString txt;
    txt = txt.fromUtf8(
            "fooapp %1\nCopyright \xC2\xA9 2012 Ed Hedges\n"
            "Licensed under the terms of ....");
    txt = txt.arg(a.applicationVersion());
    aboutBox->setText(txt);

    QMenuBar menu;
    QMenu * submenu = menu.addMenu("Help");
    QAction * about = submenu->addAction("About", aboutBox, SLOT(exec()));
    about->setMenuRole(QAction::AboutRole);

    w.show();

    return a.exec();
} 
于 2012-06-18T11:27:24.620 に答える
1

Python については知りません。しかし Mac では、About、Preferences、または Quit メニュー項目を作成すると、Qt はそれらを左側のアプリケーション メニュー (太字のテキスト) に自動的に移動します。

独自のアプリケーション メニューを作成しようとしていて、Qt が混乱していると思います。作成する必要はありません。About、Preferences、またはQuitメニュー項目をFileまたはその他のメニュー見出しの下に置くと、シフトされます。

于 2012-06-18T22:38:14.470 に答える