1

プログラムのさまざまな時点で必要な文字列があります。Qt が画像リソースを管理できることは知っていますが、いくつかの文字列に対して同様の機能が必要です。現在、ずさんなソリューションである文字列リソース クラスを使用しています。

class StringRes {
public:
    static const QString& appName() { return _appName; }
    static const QString& appVersion() { return _appVersion; }
private:
    static const QString _appName;
    static const QString _appVersion;
};

さらに、このソリューションは、コードの特定のポイントでセグメンテーション違反を引き起こします。

_fileStream << QString("This is ")
               + StringRes::appName()
               + " "
               + StringRes::appVersion()
               + " reporting for duty.\n";

Qt プログラマー (または C++ プログラマー全般) は文字列リソースをどのように管理していますか?

4

1 に答える 1

2

アプリケーションの名前とバージョン、および組織の名前とドメインだけを格納するには、QCoreApplicationsのプロパティ applicationName、applicationVersion、organizationDomain、および organizationName を使用できます。

私は通常、それらをmain()機能に設定します:

#include <QApplication>
#include "MainWindow.h"

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

    // These functions are member of QCoreApplication, QApplication's
    // parent class:
    app.setApplicationName("My Application");
    app.setApplicationVersion("3.5.2");
    app.setOrganizationName("My Company, or just My Name");
    app.setOrganizationDomain("http://example.com/");

    MainWindow window;
    window.show();

    return app.exec();
}

そして、私はそれらを使って素敵なメッセージを表示することができます:

#include "MainWindow.h"
#include <QCoreApplication>

...

// Slot called when ? -> About menu is clicked.
void MainWindow::on_aboutAction_triggered()
{
    QString message = tr("<strong>%1</strong> %2<br />"
                         "Developed by %3")
            .arg(QCoreApplication::applicationName())
            .arg(QCoreApplication::applicationVersion())
            .arg(QString("<a href=\"%1\">%2</a>")
                .arg(QCoreApplication::organizationDomain())
                .arg(QCoreApplication::organizationName()))
            ;

    QMessageBox::about(this, tr("About"), message);
}
于 2012-06-30T09:32:06.943 に答える