qq_39677327 2022-07-01 20:00 采纳率: 94.9%
浏览 528
已结题

QT能显示界面但是按钮显示不出

按钮显示不出,是怎么回事


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    initUI();
    createCornerBtn();
    initAddDlg();
    m_mydatabase=new CreateDb;
    m_mydatabase->initDB();  //初始化数据库
    onBtnRefresh();     //调用刷新按钮 其实就是重新查询数据库数据库
    m_operateType=Add; //初始化操作类型为Add
    ui->tabWidget->setStyleSheet("QTabBar::tab{min-width:30px;min-height:10ex}");  //设置tabbar的样式
}

Widget::~Widget()
{
    delete ui;
}

void Widget::initUI()
{
    setWindowTitle("学生管理系统");
    m_pStuManager=new StuManager;
    ui->tabWidget->addTab(m_pStuManager,"学生管理");
    this->show();
}

void Widget::createCornerBtn()
{
    QPushButton *btnFresh=new QPushButton("刷新");
    QPushButton *btnAdd=new QPushButton("添加");
    QPushButton *btnEdit=new QPushButton("编辑");
    QPushButton *btnDel=new QPushButton("删除");

    QWidget *cornerWidget=new QWidget;

    QHBoxLayout *hLayout=new QHBoxLayout;
    hLayout->addWidget(btnFresh);
    hLayout->addWidget(btnAdd);
    hLayout->addWidget(btnEdit);
    hLayout->addWidget(btnDel);
    cornerWidget->setLayout(hLayout);

    ui->tabWidget->setCornerWidget(cornerWidget,Qt::TopRightCorner);
    connect(btnFresh,&QPushButton::clicked,this,&Widget::onBtnRefresh);
    connect(btnAdd,&QPushButton::clicked,this,&Widget::onBtnAdd);
    connect(btnEdit,&QPushButton::clicked,this,&Widget::onBtnEdit);
    connect(btnDel,&QPushButton::clicked,this,&Widget::onBtnDel);
}

现在结果:

img


理想结果:

img

  • 写回答

3条回答 默认 最新

  • 关注

    代码问题太多了。
    (1)在createCornerBtn又new一个widget没有必要
    (2)ui->tabWidget->setCornerWidget这是什么鬼,把cornerWidget设置成tablewidget中心窗口?没这么用的。
    按钮放在tab页的右侧不好实现,会出现遮挡,一般都是把按钮放在tabwidget的右上方。
    步骤如下:
    (1)先建一个垂直布局,
    (2)新建一个水平布局,并把按钮放在水平布局中
    (3)把水平布局放在垂直布局中
    (4)把tabwidget放在垂直布局中
    运行效果如下:

    img

    createCornerBtn函数修改如下:

    
    void Widget::createCornerBtn()
    {
        QPushButton *btnFresh=new QPushButton("刷新");
        QPushButton *btnAdd=new QPushButton("添加");
        QPushButton *btnEdit=new QPushButton("编辑");
        QPushButton *btnDel=new QPushButton("删除");
    
        //QWidget *cornerWidget=new QWidget; //这个不需要
    
        //水平布局
        QHBoxLayout *hLayout=new QHBoxLayout;
        hLayout->addStretch(1); //左侧加一个弹簧,让按钮能保持在界面右侧
        hLayout->addWidget(btnFresh);
        hLayout->addWidget(btnAdd);
        hLayout->addWidget(btnEdit);
        hLayout->addWidget(btnDel);
        //cornerWidget->setLayout(hLayout);//这个不需要
    
        //ui->tabWidget->setCornerWidget(cornerWidget,Qt::TopRightCorner);//这个不需要
    
    
        //垂直布局
        QVBoxLayout *vLayout = new QVBoxLayout;
        vLayout->addLayout(hLayout);
        vLayout->addWidget(ui->tabWidget);
    
        this->setLayout(vLayout);
    
    
        connect(btnFresh,&QPushButton::clicked,this,&Widget::onBtnRefresh);
        connect(btnAdd,&QPushButton::clicked,this,&Widget::onBtnAdd);
        connect(btnEdit,&QPushButton::clicked,this,&Widget::onBtnEdit);
        connect(btnDel,&QPushButton::clicked,this,&Widget::onBtnDel);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月12日
  • 已采纳回答 11月4日
  • 创建了问题 7月1日

悬赏问题

  • ¥15 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!
  • ¥15 vmtools环境不正常
  • ¥15 请问如何在Ubuntu系统中安装使用microsoft R open?
  • ¥15 jupyter notebook
  • ¥30 informer时间序列预测
  • ¥20 SSR引物多态性分析
  • ¥15 大漠插件在Win11易语言注册调用和免注册灵异事件,VS上注册调用完全没问题
  • ¥15 Addressable缓存机制做热更新的问题