1

Qtプロジェクトにトルコ語の翻訳ファイルを使用しようとしています。.tsファイルの生成にはQtLinguistを使用しました。問題は、アプリケーションに翻訳ファイルをロードすると、QMenuBarのいずれかの項目をクリックするたびにセグメンテーション違反が発生することです。

メインウィンドウのGraphicsViewのcontextMenuEventでトリガーされるコンテキストメニューもあります。以下の行を実行しようとすると、プログラムでセグメンテーション違反が発生します。

mContextMenu->exec(event->globalPos());

mContextMenuはQMenu*であり、execはQAction*を返します。基本的に、翻訳がQActionに属する場合、この問題が発生すると思います。toolButtonsのtoolTipsを変換するときに、同じ問題が発生しました。QActionsとtoolTipsの翻訳をどのように処理する必要がありますか?

4

2 に答える 2

0

以下のように、mContextMenuにいくつかのアクションを追加しています。

    void RadarView::prepareMainMenu() {
mContextMenu = new QMenu();
//showLineAction->setShortcut(QKeySequence("Alt+Shift+L"));
mpStartRulerAction = new QAction(QObject::tr("Start Ruler"), this);
mContextMenu->addAction(mpStartRulerAction);
connect(mpStartRulerAction, SIGNAL(triggered()), this,
        SLOT(menuStartRulerClicked()));
mpStartRulerAction->setProperty("TYPEVIEW", MV_StartRuler);

mpEndRulerAction = new QAction(QObject::tr("End Ruler"), this);
mContextMenu->addAction(mpEndRulerAction);
connect(mpEndRulerAction, SIGNAL(triggered()), this, SLOT(menuEndRulerClicked()));
mpEndRulerAction->setProperty("TYPEVIEW", MV_EndRuler);

mpCriticalRegionAction = new QAction(QObject::tr("Critical Region"), this);
mContextMenu->addAction(mpCriticalRegionAction);
connect(mpCriticalRegionAction, SIGNAL(triggered()), this, SLOT(menuDefineCriticalRegionClicked()));
mpCriticalRegionAction->setProperty("TYPEVIEW", MV_Critical_Region);

mpAScopeAction = new QAction(QObject::tr("A-Scope Line"), this);
mContextMenu->addAction(mpAScopeAction);
connect(mpAScopeAction, SIGNAL(triggered()), this, SLOT(menuAddAScopeLine()));
mpAScopeAction->setProperty("TYPEVIEW", MV_A_Scope);

}

グラフィックビューのコンテキストメニューイベントは、次のように実装されます。

    void RadarView::contextMenuEvent(QContextMenuEvent * event) {
LOGGER_START
//check if the item has its own  context menu...
QList<QGraphicsItem*> items = this->items(event->pos());

if (items.size() != 0) {
    bool isValid = true;
    for (int i = 0; i < items.size(); ++i) {
        QGraphicsRulerLineItem *rulerLineItem = NULL;
        rulerLineItem = dynamic_cast<QGraphicsRulerLineItem*> (items[i]);
        if (rulerLineItem != NULL || dynamic_cast<AScopeLineItem*> (items[i]) || dynamic_cast<PpiTargetItem*> (items[i])){
            isValid = false;
        }
        else {
            PpiPlotItem *targetItem = NULL;
            targetItem = dynamic_cast<PpiPlotItem*> (items[i]);
            if (targetItem != NULL) {
                isValid = false;
                if (currentVisibleMenuItems.contains(0)) {
                    startItem = targetItem;
                } else if (currentVisibleMenuItems.contains(1)) {
                    endItem = targetItem;
                }
            }
        }
    }

    if (isValid == true) {

        if(currentVisibleMenuItems.size() ==0)
            return;
        //Get last clicked Position.
        mLastClickedPos = event->pos();
        //show  menu of RadarView...
        mpRightClickAction = mContextMenu->exec(event->globalPos());
    } else {
        QGraphicsView::contextMenuEvent(event);
    }

}

LOGGER_END

}

于 2012-12-19T11:34:43.180 に答える
0

上記の問題は、QApplicationを継承するカスタマイズされたクラスの代わりにQApplicationを使用した場合に解決されます。カスタマイズされたクラス内に、bool QApplication :: notify(QObject *レシーバー、QEvent * e)関数が実装されました。QApplicationを直接使用した場合、すべての翻訳が正しく読み込まれ、QActionアイテムとツールチップに関して問題は発生しませんでした。

于 2012-12-21T09:39:14.253 に答える