首页 > 解决方案 > 如何从 QTabWidget 的当前选项卡中获取继承 QTreeView 的类?

问题描述

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

我试过了

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

但是这段代码返回

error: use of deleted function ‘View::View(View&&)’

主窗口.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;
}

主窗口.h

#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

视图.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

标签: c++qt5qtreeviewqtabwidget

解决方案


推荐阅读