Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取从QTabWidget的当前选项卡继承QTreeView的类?_C++_Qt5_Qtreeview_Qtabwidget - Fatal编程技术网

C++ 如何获取从QTabWidget的当前选项卡继承QTreeView的类?

C++ 如何获取从QTabWidget的当前选项卡继承QTreeView的类?,c++,qt5,qtreeview,qtabwidget,C++,Qt5,Qtreeview,Qtabwidget,我用标签写了一个简单的fm。我需要从QTreeWidget的当前选项卡中放置并获取继承QTreeView的类,该类名为“视图” 我试过了 View v = qobject_cast<View>(ui->tabs->widget(index)); mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMain

我用标签写了一个简单的fm。我需要从QTreeWidget的当前选项卡中放置并获取继承QTreeView的类,该类名为“视图”

我试过了

View v = qobject_cast<View>(ui->tabs->widget(index));
mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
        ui(new Ui::MainWindow)
{
  ui->setupUi(this);
        View *view = new View;
        view->text = "hey";
        ui->tabs->addTab(view, "new");

        connect(ui->tabs, &QTabWidget::currentChanged, this, &MainWindow::curChanged);
}

void MainWindow::curChanged(int index)
{
        View v = qobject_cast<View>(ui->tabs->widget(index));
        // some code with View
}


MainWindow::~MainWindow()
{
  delete ui;
}

更改为
View*v=qobject\u cast(ui->tabs->widget(index))
@eyllanesc big谢谢,但我有一个错误:“错误:无法通过虚拟基'QTreeView'将指向基类'QObject'的指针转换为指向派生类'View'的指针”。您的
视图
类必须使用宏来启用它与
QObject\u cast
@G.M的使用。我不公开这个,但是我的类总是有Q_对象,那么请编辑您的问题以显示
视图
的真实类定义。您真的像错误消息所建议的那样从
QTreeView
继承了吗?更改为
View*v=qobject\u cast(ui->tabs->widget(index))
@eyllanesc big谢谢,但我有一个错误:“错误:无法通过虚拟基'QTreeView'将指向基类'QObject'的指针转换为指向派生类'View'的指针”。您的
视图
类必须使用宏来启用它与
QObject\u cast
@G.M的使用。我不公开这个,但是我的类总是有Q_对象,那么请编辑您的问题以显示
视图
的真实类定义。您是否真的像错误消息所显示的那样,从
QTreeView
继承了虚拟数据?
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
        ui(new Ui::MainWindow)
{
  ui->setupUi(this);
        View *view = new View;
        view->text = "hey";
        ui->tabs->addTab(view, "new");

        connect(ui->tabs, &QTabWidget::currentChanged, this, &MainWindow::curChanged);
}

void MainWindow::curChanged(int index)
{
        View v = qobject_cast<View>(ui->tabs->widget(index));
        // some code with View
}


MainWindow::~MainWindow()
{
  delete ui;
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "view.h"
#include <QMainWindow>
#include <QDebug>

namespace Ui {
  class MainWindow;
}

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  explicit MainWindow(QWidget *parent = nullptr);
  ~MainWindow();
  void curChanged(int index);

private slots:

private:
  Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
#include <QTreeView>
#include <QFileSystemModel>
#include <string.h>

class View : public QTreeView
{
        public:
                std::string text;
};
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I. -I/usr/lib64/qt5/mkspecs/linux-g++ -o main.o main.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I. -I/usr/lib64/qt5/mkspecs/linux-g++ -o mainwindow.o mainwindow.cpp
/usr/lib64/qt5/bin/moc -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB --include /home/c63/Projects/C++/QT/sof/moc_predefs.h -I/usr/lib64/qt5/mkspecs/linux-g++ -I/home/c63/Projects/C++/QT/sof -I/home/c63/Projects/C++/QT/sof -I/usr/include/qt5 -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include/g++-v8 -I/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include/g++-v8/x86_64-pc-linux-gnu -I/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include/g++-v8/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include-fixed -I/usr/include mainwindow.h -o moc_mainwindow.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I. -I/usr/lib64/qt5/mkspecs/linux-g++ -o moc_mainwindow.o moc_mainwindow.cpp
g++ -Wl,-O1 -o sof main.o mainwindow.o moc_mainwindow.o   -lQt5Widgets -lQt5Gui -lQt5Core /usr/lib64/libGLESv2.so -lpthread
/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: mainwindow.o: in function `MainWindow::curChanged(int)':
mainwindow.cpp:(.text+0x2b): undefined reference to `View::staticMetaObject'
/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: mainwindow.o: in function `MainWindow::MainWindow(QWidget*)':
mainwindow.cpp:(.text+0x3aa): undefined reference to `vtable for View'
collect2: error: ld returned 1 exit status
make: *** [Makefile:171: sof] Error 1