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

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日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法