QComboBox动作教程?

时间:2016-07-22 01:22:13

标签: qt qt5

因此,我能找到的每个QComboBox教程都使用完全相同的代码,并没有教授如何为每个选项制作动作。有人可以推荐我或提供某种教程,以便在选择或突出显示选项时如何使某些事情发生? (最好两者) 另外,请不要标记这个问题,我需要从经验中学习,我在网上找不到任何有关QComboBox的动作。

2 个答案:

答案 0 :(得分:1)

听起来您想要将QComboBox中的项目链接到QAction?将项目添加到QComboBox时,您可以以QVariant(see QComboBox::addItem)的形式将自定义用户数据链接到您的项目。然后,您可以致电QComboBox::itemData

来访问此用户数据

在您的情况下,您可以将每个ComboBox项的用户数据设置为指向QAction的指针,然后可以通过QComboBox :: 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
    }
}

答案 1 :(得分:0)

当用户更改当前项目并突出显示项目时,QComboBox会发出信号currentIndexChanged(int index)highlighted(int index)。这些信号的参数是高亮/当前项目索引。

要对项目更改/突出显示进行定义和操作,您可以使用userData - 为每个项目添加QVariant变量(请参阅void QComboBox::addItem(const QString &text, const QVariant &userData = QVariant())),然后在相应的广告位中使用此变体QVariant QComboBox::itemData(int index, int role = Qt::UserRole),分析此数据并处理任何操作。