当我使用UI界面开发工具时,我将一个UI界面内添加一个QTreeview后将这个界面类提升到MainWindow中就可以正常的运行使用,但当我打开被提升的类,他是一个Wiget派生类,因为QTreeView是这个类的子对象。因此无法访问到QTreeView的一些东西。由于拿不到这个QTreeView的cpp(已经被QT封装到xml文件中了),但我由想直接把这个widget的cpp当作QTreeView的cpp来使用给他添加功能时,我发现是可以这样用的
void ShowWiget::rightPopupMenu(const QModelIndex& index)
{
if(qApp->mouseButtons()==Qt::RightButton)
{
TreeItem* item=static_cast<TreeItem*>(index.internalPointer());
if(item)
{
RightMenu::getInstence()->showMenu(item->getRightMenuType());
}
};
}
我发现QT的这种view视图中可以直接通过QModelIndex这个类获取到那个选中的项。但问题来了我使用信号的时候发现他没有鼠标点击信号pressed
connect(ui->treeView,&ShowWiget::pressed,this,&ShowWiget::rightPopupMenu);
为了能触发这个槽函数,我采用的是手动把这个Widet的继承类改成QTreeView发现这么干完全没问题。
image.png
QT可以正常运行代码,于是这个问题就解决了。
qApp需要引入#include <QApplication>。
网友评论