• 5676阅读
  • 4回复

QStackedWidget类的使用疑问 [复制链接]

上一主题 下一主题
离线cw2010jsj
 

只看楼主 倒序阅读 楼主  发表于: 2013-05-27
关键词: QStackedWidget.ui
下面程序想实现,点击pushButton时widget_1显示,点击pushButton_2时,widget_2显示。widget_1/widget_2是在两个.ui文件
执行后,两个QMessageBox都有结果,没有出现.ui文件。坐等高手指点。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMessageBox"
#include <QHBoxLayout>
#include <QVBoxLayout>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    stackWidget = new QStackedWidget;
    widget_1 = new widget1;
    widget_2 = new widget2;


    stackWidget->addWidget(widget_1);
    stackWidget->addWidget(widget_2);


    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(changepage1()));
    connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(changepage2()));


    QHBoxLayout *middleButtonLayout=new QHBoxLayout;
    middleButtonLayout->addWidget(ui->pushButton);
    middleButtonLayout->addWidget(ui->pushButton_2);
    QVBoxLayout *mainLayout=new QVBoxLayout;
    mainLayout->addLayout(middleButtonLayout);
    mainLayout->addWidget(stackWidget);
    setLayout(mainLayout);
}


void MainWindow::changepage1()
{
    QMessageBox::information(this,"info","show 1","OK");
    stackWidget->setCurrentIndex(0);
}


void MainWindow::changepage2()
{
    QMessageBox::information(this,"info","show 2","OK");
    stackWidget->setCurrentIndex(1);
}


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

离线jdwx

只看该作者 1楼 发表于: 2013-05-27
回 楼主(cw2010jsj) 的帖子
先用ui编辑器来做这些界面,看ui.h的代码,就是代码标准的写法。
用Designer最方便。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线cw2010jsj

只看该作者 2楼 发表于: 2013-05-27
Re:回 楼主(cw2010jsj) 的帖子
引用第1楼jdwx于2013-05-27 15:24发表的 回 楼主(cw2010jsj) 的帖子 :
先用ui编辑器来做这些界面,看ui.h的代码,就是代码标准的写法。
用Designer最方便。


能先告诉我一下,那儿显示不了么?
离线dbzhang800

只看该作者 3楼 发表于: 2013-05-27
    setLayout(mainLayout);

这一个就错了
离线jdwx

只看该作者 4楼 发表于: 2013-05-27
引用第3楼dbzhang800于2013-05-27 16:33发表的  :
    setLayout(mainLayout);
这一个就错了

确实如此,QMainWindow不能setLayout,需要一个QWidget作为CentralWidget,
你需要再new出一个QWidget,对这个widget->setLayout。
void QMainWindow::setCentralWidget(QWidget * widget)
用setCentralWidget(widget);把widget加入QMainWindow。

发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个