2016-07-22 16 views
0

私が見つけることができるすべてのQComboBoxチュートリアルは、全く同じコードを使用していて、各オプションのアクションを作成する方法を教えていませんでした。選択肢が選択または強調表示されたときに何かを起こす方法について、誰かが私にお勧めしたり、何らかのチュートリアルを提供したりすることはできますか? (好ましくは両方) また、この質問にフラグを立てないでください。私は経験から学ぶ必要があり、QComboBoxのアクションについてはWeb上で何も見つかりません。QComboBoxアクションチュートリアル?

答えて

0

QComboBoxには、ユーザーが現在のアイテムを変更してアイテムをハイライト表示すると発生するcurrentIndexChanged(int index)およびhighlighted(int index)という信号があります。これらのシグナルの引数は、ハイライトされている/現在のアイテムインデックスです。

を定義するには、アクションは、項目の変更に行うために/あなたが userDataを使用することができますハイライト - その後、 QVariant QComboBox::itemData(int index, int role = Qt::UserRole)を使用して対応するスロットでこのバリアントを取得する( void QComboBox::addItem(const QString &text, const QVariant &userData = QVariant())を参照)各項目に QVariant変数を追加し、このデータを分析し、任意のアクションを処理します。

+0

することができますこれに関するすべてのソースコードを提供していますか?ソースコードを選択して情報ボックスであるメッセージボックスを開き、もう1つのオプションで警告が表示されるようにすることはできますか?ありがとう! –

1

QComboBoxのアイテムをQActionにリンクしたいと思うのですか? QComboBoxにアイテムを追加するときは、QVariant(see QComboBox::addItem)の形式でアイテムにカスタムユーザーデータをリンクできます。このユーザーデータには、QComboBox::itemDataを呼び出してアクセスできます。あなたはQComboBoxを介してアクセスすることができQActionへのポインタであることを各ComboBoxアイテムのユーザデータを設定することができますあなたのケースでは

:: ITEMDATA例えば

class boxTest : public QObject 
{ 
    Q_OBJECT 

public: 

    QAction * firstAction; 
    QAction * secondAction; 
    QComboBox *box; 
    boxTest(); 

protected slots: 

    void boxCurrentIndexChanged(int); 
}; 

boxTest::boxTest() 
{ 
    firstAction = new QAction(this); 
    firstAction->setText("first action"); 
    secondAction = new QAction(this); 
    secondAction->setText("second action"); 

    box = new QComboBox(this); 
    box->addItem(firstAction->text(), QVariant::fromValue(firstAction)); //add actions 
    box->addItem(secondAction->text(), QVariant::fromValue(secondAction)); 

    connect(box, SIGNAL(currentIndexChanged(int)), this, boxCurrentIndexChanged(int))); 

} 

void boxTest::boxCurrentIndexChanged(int index) 
{ 
    QAction * selectedAction = box->itemData(index, Qt::UserRole).value<QAction *>(); 
    if (selectedAction) 
    { 
     selectedAction->trigger(); //do stuff with your action 
    } 
}