• 6650阅读
  • 1回复

QStackedWidget中的widget怎么加上button功能? [复制链接]

上一主题 下一主题
离线hai20111102
 
只看楼主 倒序阅读 楼主  发表于: 2012-07-04
关键词: QT4QStackedWdiget
我的问题是在stackwidget中加入的widget中怎么加入按钮功能,我下面是我程序的代码:
//main.cpp
#include <QtGui/QApplication>  
#include "layout1.h"  
int main(int argc, char *argv[])  
{  
    QApplication a(argc, argv);  
    layout1 w;  
    w.show();  
    return a.exec();  
}
//-------------
//layout1.h

#ifndef LAYOUT1_H  
#define LAYOUT1_H  
#include <QtGui/QDialog>  
#include <QWidget>  
#include <QtGui>
#include "widget1.h"  
class layout1 : public QWidget  
{  
     Q_OBJECT  
public:  
    layout1(QWidget *parent = 0);  
public slots:  
    void saveData();  
private:  
    QListWidget  *listWidget;  
    QStackedWidget *stackedWidget;
    QPushButton *saveButton;  
    QPushButton *cancelButton;
    Widget1 *widget1;  

};  
#endif // LAYOUT1_H  
//-------------------------
//widget1.h
#ifndef WIDGET1_H  
#define WIDGET1_H  
#include <QWidget>  
#include <QLineEdit>  
#include <QVBoxLayout>  
#include <QHBoxLayout>  
#include <QLabel>  
#include <QPushButton>
class Widget1 : public QWidget  
{  
public:  
    Widget1();  
    QLineEdit nickNameEdit;
    QLineEdit accountEdit;  
    QLineEdit mailEdit;  
public slots:
  void opeSlot();
private:  
QPushButton *ope;
};  
#endif // WIDGET1_H

//layout1.cpp

#include "layout1.h"  
#include <QSettings>  
#include <QMessageBox>layout1::layout1(QWidget *parent):QWidget(parent)  
{  
listWidget=new QListWidget;
stackedWidget=new QStackedWidget;
saveButton=new QPushButton("change stackwidget");//从主窗口可以实现
cancelButton=new QPushButton("cancel");
    
widget1=new Widget1;
    connect(listWidget,SIGNAL(currentRowChanged(int)),stackedWidget,SLOT(setCurrentIndex(int)));  
    connect(saveButton,SIGNAL(pressed()),this,SLOT(saveData()));  
    connect(cancelButton,SIGNAL(pressed()),this,SLOT(close()));  

QHBoxLayout *hLayout=new QHBoxLayout;
    QHBoxLayout *buttonLayout=new QHBoxLayout;
    QVBoxLayout *vLayout=new QVBoxLayout;

    buttonLayout->addWidget(saveButton);  
    buttonLayout->addWidget(cancelButton);  
    
    listWidget->addItem("basic info");  
    stackedWidget->addWidget(widget1);  
    stackedWidget->setCurrentIndex(1);
hLayout->addWidget(listWidget,1);  
    hLayout->addWidget(stackedWidget,2);
    vLayout->addLayout(hLayout);  
    vLayout->addLayout(buttonLayout);  

    setLayout(vLayout);  
}  
void layout1::saveData()  
{  
widget1->nickNameEdit.setText("11111");
widget1->accountEdit.setText("2222");
widget1->mailEdit.setText("3333"); QMessageBox::information(this,"he","hhhhhh",QMessageBox::Yes);
}  

//widget1.cpp
#include "widget1.h"  
Widget1::Widget1()  
{  
  nickNameEdit.setText("nickname");
  accountEdit.setText("account");
  mailEdit.setText("mail");
  ope=new QPushButton("ope");//从stackedWidget中操作没能实现  QVBoxLayout *layout=new QVBoxLayout;
  layout->addWidget(&nickNameEdit);
  layout->addWidget(&accountEdit);
  layout->addWidget(&mailEdit);
  layout->addWidget(ope);
  connect(ope,SIGNAL(clicked()),this,SLOT(opeSlot()));  setLayout(layout);  
}  
void Widget1::opeSlot()
{//这说明 QStackedWidget 中 widget 的 button 不能操作,(或我还不知道怎么用)\
//要想操作widget中的内容,现在只能从主界面的layout1中按钮来实现
nickNameEdit.setText("opeSlot");
accountEdit.setText("opeslot(");
mailEdit.setText("mailSop");
} 执行的结果 如下 :单击ope不执行,下面的按钮可以执行,为什么?我希望在 Widget1 中具有按钮功能,应该怎么做?  
离线passion_wu
只看该作者 1楼 发表于: 2012-07-06
Widget1没加Q_OBJECT宏,还有你的类名好奇怪。
快速回复
限100 字节
 
上一个 下一个