如何找出 internalPointer 的类型?

How to find out the type in internalPointer?

我有这样的模型(在 treeView 中):

data1 - 一种 你好 - 第二种

数据1

struct Group
{
 QString name;
 QList<Sample> samples;
}

你好

struct Sample
{
QString name;
}

我有插槽

void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
    Group *group = static_cast<Group *>(index.internalPointer());
    ui->lineEdit->setText(group->name);
}

而且我需要确切地知道我在 internalPointer(Group 或 Sample)中选择了什么类型的项目。因为类型转换总是会发生,如果我使用 static_cast<Group *>(index.internalPointer());

我强烈建议您对所有树项目使用一个公共基础 class,正如评论中所指出的那样。这个基础 class 应该为树中需要的任何数据(名称、图标、子项数量等)声明虚函数,然后在派生的 classes 中覆盖它们代表专业化,如组和样本。示例:

class TreeItem {
public:
    virtual QString GroupName() const {return "";} //Returns an empty string as a default value
    // any other common functions
}

class Group: public TreeItem {
public:
    QString GroupName() const override {return m_name;}
private:
    QString m_name;
}

class Sample: public TreeItem {
    //Let GroupName() default to the base class implementation, or override if necessary
}