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

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条)

报告相同问题?

悬赏问题

  • ¥15 51单片机使lcd显示器开机闪烁预设字符闪烁3次需要加什么代码
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题