qt的两个类学习:QStackedWidget和QListWidget

 以下源码来自“QT小神童”视频(有微小变更)

头文件:config.h

#ifndef CONFIG_H
#define CONFIG_H

#include <QtGui/QWidget>
#include <QListWidget>
#include <QListWidgetItem>
#include <QVBoxLayout>
#include <QTextCodec>
#include <QPushButton>
#include <QStackedWidget>
#include <QHBoxLayout>

#include <MyPage.h>

class config : public QWidget
{
    Q_OBJECT

public:
    config(QWidget *parent = 0);
    ~config();
    QListWidget *list;
    MyPage1 *page1;
    MyPage2 *page2;
    MyPage3 *page3;
    QStackedWidget *InfoWidget;
protected slots:
    void pagechanged(int);
};

#endif // CONFIG_H

头文件:mypage.h

#ifndef MYPAGE_H
#define MYPAGE_H

#include <QtGui/QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QGridLayout>

class MyPage1 : public QWidget
{
    Q_OBJECT

public:
    MyPage1(QWidget *parent = 0);
    ~MyPage1(){};
    QLabel *NameLabel,*HeightLabel,*WeightLabel,*BWHLabel;
    QLineEdit *NameEdit,*HeightEdit,*WeightEdit,*BWHEdit;
};

class MyPage2 : public QWidget
{
    Q_OBJECT

public:
    MyPage2(QWidget *parent = 0);
    ~MyPage2(){};
};

class MyPage3 : public QWidget
{
    Q_OBJECT

public:
    MyPage3(QWidget *parent = 0);
    ~MyPage3(){};
};

 


#endif // MYPAGE_H

以下是两个实现文件:

#include "config.h"

config::config(QWidget *parent)
    : QWidget(parent)
{
   list=new QListWidget;
   list->setIconSize(QSize(128,128));
   list->setSpacing(60);
   list->setMaximumWidth(128);
   list->setViewMode(QListView::IconMode);
   list->setMovement(QListView::Static);
   QListWidgetItem *item1=new QListWidgetItem;
   item1->setIcon(QIcon(":/rotate.png"));
   item1->setText(tr("旋转"));
   QListWidgetItem *item2=new QListWidgetItem;
   item2->setIcon(QIcon(":/butterfly1.PNG"));
   item2->setText(tr("蝴蝶1"));
   QListWidgetItem *item3=new QListWidgetItem;
   item3->setIcon(QIcon(":/butterfly2.PNG"));
   item3->setText(tr("蝴蝶2"));

   list->addItem(item1);
   list->addItem(item2);
   list->addItem(item3);

   QPushButton *btn= new QPushButton;
   btn->setText(tr("关闭"));
   connect(btn,SIGNAL(clicked()),this,SLOT(close()));

   InfoWidget=new QStackedWidget;
   page1=new MyPage1;
   page2=new MyPage2;
   page3=new MyPage3;
   InfoWidget->addWidget(page1);
   InfoWidget->addWidget(page2);
   InfoWidget->addWidget(page3);

   connect(list,SIGNAL(currentRowChanged(int)),this,SLOT(pagechanged(int)));

   QHBoxLayout *hlayout=new QHBoxLayout;
   hlayout->addWidget(list);
   hlayout->addWidget(InfoWidget);

   QGridLayout *mainlayout=new QGridLayout(this);
   mainlayout->addLayout(hlayout,0,0,1,6);
   mainlayout->addWidget(btn,1,5,1,1);

  // QVBoxLayout *vlayout=new QVBoxLayout(this);
  // vlayout->addWidget(list);
  // vlayout->addWidget(btn);
  // this->setLayout(vlayout);
   this->resize(800,600);
}

config::~config()
{

}

 void config::pagechanged(int index)
 {
     InfoWidget->setCurrentIndex(index);
 }

 

第二个实现文件

#include "MyPage.h"
MyPage1::MyPage1(QWidget *parent)
    :QWidget(parent)
{
    NameLabel=new QLabel(tr("姓名:"));
    HeightLabel=new QLabel(tr("身高:"));
    WeightLabel=new QLabel(tr("体重:"));
    BWHLabel=new QLabel(tr("三围:"));

    NameEdit=new QLineEdit(tr("苍井空"));
    HeightEdit=new QLineEdit(tr("155"));
    WeightEdit=new QLineEdit(tr("45KG"));
    BWHEdit=new QLineEdit(tr("85,80,85"));

    QGridLayout *Glayout= new QGridLayout(this);
    Glayout->addWidget(NameLabel,0,0);
    Glayout->addWidget(HeightLabel,1,0);
    Glayout->addWidget(WeightLabel,2,0);
    Glayout->addWidget(BWHLabel,3,0);

    Glayout->addWidget(NameEdit,0,1);
    Glayout->addWidget(HeightEdit,1,1);
    Glayout->addWidget(WeightEdit,2,1);
    Glayout->addWidget(BWHEdit,3,1,1,2);

    this->setLayout(Glayout);

}

MyPage2::MyPage2(QWidget *parent)
    :QWidget(parent)
{

}

MyPage3::MyPage3(QWidget *parent)
    :QWidget(parent)
{

}

 

最后是一个主程序

#include <QtGui/QApplication>
#include "config.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    config w;
    w.show();

    return a.exec();
}

 

还有一个资源文件:就是添加了以下三个图片:

 

多谢“QT小神童”,如果大家有什么好的视频,不妨把网址发给我,非常感谢哦。

 

 

 


 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值