0

画像用のフィルタのリストを使用していQListWidgetます。このフィルタはコンテキスト メニューによって追加され、contextMenuEvent を再実装しました。2 つのコンテキスト メニューがあります。addfilter メニューと deletefilter メニューです。フィルタを追加すると、これ :

MenuFiler::MenuFiler()
{

    Laplace = new QAction("Laplace" , this);
    QObject::connect(Laplace , SIGNAL(triggered()) , this , SLOT(LaplaceSlot()) );

    QObject::connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, `SLOT(ManageControls(QListWidgetItem*)));  // to show controls for clicked item`           
    .
    . 
    .
}


void MenuFiler::LaplaceSlot()
{
    this->addItem("Laplace");
}

今、他の関数で、アイテムがあるかどうかを確認します。このアイテムのテキストを取得し、このフィルターのコントロールを作成します。このようにします

void MenuFiler::ManageControls(QListWidgetItem*item)
{
 if (item->text() == "Laplace")
    {
        if (_laplacianeffect.get() == NULL)
        {
             _laplacianeffect =  unique_ptr<Laplacianeffect> (new Laplacianeffect());
        }
        _laplacianeffect.get()->show();

    }
    .
    .
    // etc
}

コントロールはqframeにリンクされたボタンとスライダーだけで、ここでは問題ありません。私の問題は、重複した効果を保存するためのベクトルを作成したい場合です。たとえば、ユーザーは、フィルターリストを表す qListWidget にこのフィルターを追加します。

ラプラス その他の効果 ラプラス

だから私はこのようなことをします

void MenuFiler::LaplaceSlot()
{
  _laplacianeffect.push_back(new Laplacianeffect() );

    this->addItem("Laplace");
}

魔女フィルターが選択されていることを検出する方法

void MenuFiler::ManageControls(QListWidgetItem*item)
    {
     if (item->text() == "Laplace")

        {
 // what is the code that i should use to detect witch effect id is selected)

               _laplacianeffect.at(filterid).show()


        }
    }
4

1 に答える 1

1

追加のユーザー定義データをQListWidgetItems に保存できます。たとえば、エフェクトのすべてのパラメーターを保存できます。setDataおよび関数を使用してdata、保存と検索を行います。例:

//Let these be the things you want to save for the filter.
int filterParameter1;
QString filterParameter2;
//etc...

//Save them in your QListWidgetItem* :
item->setData(Qt::UserRole + 0, filterParameter1);
item->setData(Qt::UserRole + 1, filterParameter2);

//Retrieve them later by having the QListWidgetItem* pointer:
filterParameter1 = item->data(Qt::UserRole + 0).toInt();
filterParameter2 = item->data(Qt::UserRole + 1).toString();

Qt::UserRoleはデータを保存できる最初の場所であり、次の場所に必要な数のデータを保存できます。確実に保存して正しいタイプを取得するのはあなた次第です。

ただし、あなたの場合、実際の効果を指す数値を構造体などに格納する方が簡単な方法かもしれません。または、パラメーターを含むクラスへのポインターをLaplacianeffect保存することもできます。

編集:ポインタを保存する場合:

ポインターの格納は少しトリッキーな場合があります。標準の型システムに準拠した方法はこの質問で説明されていますが、簡単な代替手段として、ポインターをキャストしuintptr_tて保存し、取得するときにポインター型にキャストし直すことができます。

ただし、最初の方法を使用するか、2 番目の方法を試したい場合は、ポインターと整数の変換について詳しく読むことをお勧めします (32 ビットと 64 ビットの違いなどにより、キャストの誤用は危険な場合があるため)。

于 2013-03-28T12:03:13.170 に答える