如何找出 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
}
我有这样的模型(在 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
}