Mr_547
2021-05-25 01:16
采纳率: 66.7%
浏览 113

QT 如何正确创建自定义的QWidget子类窗口

最近在学习QT,于是打算写个成绩管理系统,本想着登陆成功就弹出用户使用的系统窗口(StudentFrom),结果碰壁,想了很久不知道怎么回事。

 

这是StudentFrom.h文件内容:

#ifndef STUDENTFROM_H
#define STUDENTFROM_H

#include <QWidget>

#include"userfrom.h"
#include"student.h"

namespace Ui {
class StudentFrom;
}

class StudentFrom : public QWidget
{
    Q_OBJECT

public:
    explicit StudentFrom(QWidget *parent = nullptr);
    explicit StudentFrom(Student * user, QWidget *parent = nullptr);
    ~StudentFrom();

private:
    Ui::StudentFrom *ui;

    Student * user=nullptr;

};

#endif // STUDENTFROM_H

定义函数createUserFrom,根据用户类型(user_type)创建对应的用户窗口(这里只能创建学生窗口)。函数定义如下:

QWidget * createUserFrom(int user_type, Person * user)
{
    switch(user_type)
    {
    case STUDENT:
        {
            return new StudentFrom((Student *)(user));
            break;
        }
    case TEACHER:
        {
            break;
        }
    default:
        return nullptr;
    }
    return nullptr;
}

使用学生账号登陆结束后创建StudentFrom窗口,代码如下(user_from是QWidget指针):

if(true==creatUser(user_type))//建立当前用户
    {
        user_from=(StudentFrom *)createUserFrom(user_type, user);//创建用户窗口
        if(user_from!=nullptr)
            user_from->show();

        this->hide();//隐藏窗口
    }

这是StudentFrom的ui:

但是结果谈出来的窗口是这个样子的:

 我感觉user_from是QWidget窗口而非StudentFrom窗口,StudentFrom有关的文件也没有问题,因为我直接定义一个StudentFrom对象show出来的窗口没有问题,这我就觉得很奇怪了,希望高人指点指点。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • qfl_sdu 2021-05-25 09:32
    已采纳

    你自己定义的

    StudentFrom构造函数中,没有新建ui

    代码修改如下:

    StudentFrom::StudentFrom(Student * user, QWidget *parent) : QWidget(parent), user(user),
        ui(new Ui::StudentFrom)
    {
        //setWindowFlags(Qt::Window);
        ui->setupUi(this);
    
    }
    点赞 评论
  • Mr_547 2021-05-25 01:18

    我发现结果窗口的title是我的项目文件名?这是不是能证明我的想法是对的?

    点赞 评论

相关推荐 更多相似问题