Qt不允许我创建一个以我的应用程序命名的带有字符串“About”、“Preferences”或“Quit”的菜单项?有什么提示吗?

2024-04-25 11:40:12 发布

您现在位置:Python中文网/ 问答频道 /正文

所以基本上我想用PySide和Qt框架创建一个GUI应用程序。我正在使用QT设计器进行初始UI设计。应用程序的第一个版本将在Mac上运行,我希望它像其他Mac应用程序一样,应用程序的名称是粗体的,一直到左边有一个“About”、“Preferences”和“Quit”。在

问题是每当我添加这些类型的字符串时,下拉列表就停止工作。在

这是我第一次使用PySide、QT框架和dqt设计器的GUI。在


Tags: 字符串版本名称框架应用程序ui类型mac
2条回答

我不知道Python,但在Mac上,你可以创建Preferences或Quit菜单项,Qt会自动将它们转移到左边的应用程序菜单(带有粗体文本的菜单)。在

我猜您正在尝试创建自己的应用程序菜单,而Qt正变得困惑。你不需要创造它。把你的“关于”、“首选项”或“退出”菜单项放在“文件”或其他菜单项下,它们就会发生变化。在

是一个例子,它让^ {< CD1>}菜单项在MAC中正确工作,在C++中。关键是setMenuRole到正确的角色。有Quit、About、Preferences和About Qt的角色。你不需要在菜单上用粗体的名字来做任何事情。Qt将自动将具有正确角色的项移动到它们所属的位置。你不需要做任何事情来获得“退出”菜单项,如果你不提供,它会自动添加。在

如果在Qt设计器中创建菜单,只需设置这些菜单QActions的menuRole属性。这就是菜单到正确位置所需的全部内容。不要添加带有应用程序名称的菜单。只需创建常见的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();
} 

相关问题 更多 >