我的
问题是在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 中具有按钮功能,应该怎么做?