Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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++ 如何在Qt C+中单击菜单栏中的元素时打开新的QDailog窗口+;_C++_Qt - Fatal编程技术网

C++ 如何在Qt C+中单击菜单栏中的元素时打开新的QDailog窗口+;

C++ 如何在Qt C+中单击菜单栏中的元素时打开新的QDailog窗口+;,c++,qt,C++,Qt,材质类有一个带有菜单栏的主窗口。当我单击菜单栏中的一个元素时,我想打开对话框窗口。 材料h #ifndef MATERIALS_H #define MATERIALS_H #include <QMainWindow> #include "materialinner.h" class FictionSection; namespace Ui { class Materials; } class Materials : public QMainWindow, public Mate

材质类有一个带有菜单栏的主窗口。当我单击菜单栏中的一个元素时,我想打开对话框窗口。 材料h

#ifndef MATERIALS_H
#define MATERIALS_H

#include <QMainWindow>
#include "materialinner.h"
class FictionSection;

namespace Ui {
class Materials;
}

class Materials : public QMainWindow, public MaterialInner
{
    Q_OBJECT

public:
    explicit Materials(QWidget *parent = 0);
    ~Materials();

private:
    Ui::Materials *ui;
    FictionSection *fiction;
};

#endif // MATERIALS_H
#如果材料不合格#
#定义材料
#包括
#包括“materialinner.h”
班级管理科;
名称空间用户界面{
课堂材料;
}
类别材料:公共QMainWindow、公共MaterialInner
{
Q_对象
公众:
显式物料(QWidget*parent=0);
~Materials();
私人:
Ui::Materials*Ui;
虚构部分*虚构;
};
#endif//MATERIALS\u H
materials.cpp

#include "materials.h"
#include "ui_materials.h"
#include "fictionsection.h"

#include <QDebug>
#include <QMessageBox>

Materials::Materials(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Materials)
{
    ui->setupUi(this);
 // connect(ui->ficti,SIGNAL(textChanged(const QString &)),this,SLOT(displaySearch()));
}

Materials::~Materials()
{
    delete ui;
}
void Materials::on_actionFiction_section_triggered()
{
    this->hide();
     fiction = new FictionSection();
    fiction->show();

}
#包括“materials.h”
#包括“ui_materials.h”
#包括“第.h节”
#包括
#包括
材质::材质(QWidget*父项):
QMainWindow(父级),
ui(新ui::材质)
{
用户界面->设置用户界面(此);
//连接(ui->virtual,信号(textChanged(const-QString&)),这个,插槽(displaySearch());
}
材料::~Materials()
{
删除用户界面;
}
作废材料::在行动小说部分触发()
{
这个->隐藏();
虚构=新虚构部分();
小说->表演();
}
第h节

#ifndef FICTIONSECTION_H
#define FICTIONSECTION_H

#include <QDialog>
#include "materials.h"


namespace Ui {
class FictionSection;
}

class FictionSection : public QDialog, public Materials
{
    Q_OBJECT

public:
    explicit FictionSection(QWidget *parent = 0);
    ~FictionSection();

private:
    Ui::FictionSection *ui;

};

#endif // FICTIONSECTION_H
#如果不符合第H节
#定义虚拟部分
#包括
#包括“materials.h”
名称空间用户界面{
班级管理科;
}
课堂部分:公共QDialog、公共材料
{
Q_对象
公众:
显式虚拟部分(QWidget*parent=0);
~1节();
私人:
Ui::虚拟部分*Ui;
};
#endif//U H段
当我编译时,它给出了一个错误 会员“展示”请求不明确。
请帮我解决这个问题。提前谢谢。

问题是您的
虚拟部分
类继承自
QDialog
材质
,但您的
材质
类也继承自
QMainWindow
QMainWindow
QDialog
都有一个虚拟的
show()
方法(继承自
QWidget
),这会导致歧义。换句话说:您打算调用
QMainWindow::show
的实现还是
QDialog::show
的实现?没人知道

要解决这个问题,您应该正确地使用继承。从
QMainWindow
QDialog
继承,但不能同时从两者继承

您需要理解为什么您继承了自己的方式(这是错误的),并改进类之间关系的逻辑,以避免类似这样的问题


此外,类名应为单数,因此
材质
应为
材质
。如果它需要处理多个问题,那么它可以是
MaterialManager
或类似的东西。

@user3279893如果它对您有帮助,请将答案标记为“已接受”,让其他人知道此类问题的解决方案。