Mr_547 2021-05-25 01:16 采纳率: 50%
浏览 696
已采纳

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出来的窗口没有问题,这我就觉得很奇怪了,希望高人指点指点。

  • 写回答

3条回答 默认 最新

  • 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);
    
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效