QListWidget和QStackedWidget的简单使用,模仿QQ设置
layout1.pro
- SOURCES += layout1.cpp /
- main.cpp /
- widget1.cpp /
- widget2.cpp
- HEADERS += layout1.h /
- widget1.h /
- widget2.h
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 <QListWidget>
- #include <QStackedWidget>
- #include <QHBoxLayout>
- #include <QtGui/QApplication>
- #include <QTextCodec>
- #include <QPushButton>
- #include "widget1.h"
- #include "widget2.h"
- class layout1 : public QWidget
- {
- Q_OBJECT
- public:
- layout1(QWidget *parent = 0);
- public slots:
- void saveData();
- private:
- QListWidget listWidget;
- QStackedWidget stackedWidget;
- QHBoxLayout hLayout;
- QHBoxLayout buttonLayout;
- QVBoxLayout rightLayout;
- QPushButton saveButton;
- QPushButton cancelButton;
- Widget1 widget1;
- Widget2 widget2;
- };
- #endif // LAYOUT1_H
layout1.cpp
- #include "layout1.h"
- #include <QSettings>
- layout1::layout1(QWidget *parent):QWidget(parent)
- {
- /*设置中文显示编码,否则为乱码*/
- QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "utf8"));
- /*设置窗口背景*/
- setStyleSheet(QString::fromUtf8("layout1{background-color: rgb(51, 204, 204);}"));
- /*读取信息*/
- QSettings data("data",QSettings::IniFormat);
- data.beginGroup("基本信息");
- widget1.nickNameEdit.setText(data.value("昵称").toString());
- widget1.accountEdit.setText(data.value("帐号").toString());
- widget1.mailEdit.setText(data.value("邮箱").toString());
- data.endGroup();
- data.beginGroup("详细信息");
- widget2.addressEdit.setText(data.value("地址").toString());
- widget2.jobEdit.setText(data.value("工作").toString());
- widget2.introductionEdit.setPlainText(data.value("介绍").toString());
- data.endGroup();
- /*连接信号*/
- connect(&listWidget,SIGNAL(currentRowChanged(int)),&stackedWidget,SLOT(setCurrentIndex(int)));
- connect(&saveButton,SIGNAL(pressed()),this,SLOT(saveData()));
- connect(&cancelButton,SIGNAL(pressed()),this,SLOT(close()));
- /*初始化按钮*/
- saveButton.setText("保存");
- cancelButton.setText("取消");
- buttonLayout.addWidget(&saveButton);
- buttonLayout.addWidget(&cancelButton);
- /*初始化各部件*/
- listWidget.addItem("基本资料");
- listWidget.addItem("详细资料");
- stackedWidget.addWidget(&widget1);
- stackedWidget.addWidget(&widget2);
- stackedWidget.setCurrentIndex(1);
- rightLayout.addWidget(&stackedWidget);
- rightLayout.addLayout(&buttonLayout);
- hLayout.addWidget(&listWidget,1);
- hLayout.addLayout(&rightLayout,3);
- setLayout(&hLayout);
- }
- void layout1::saveData()
- { /*保存信息*/
- QSettings data("data",QSettings::IniFormat);
- data.beginGroup("基本信息");
- data.setValue("昵称",widget1.nickNameEdit.text());
- data.setValue("帐号",widget1.accountEdit.text());
- data.setValue("邮箱",widget1.mailEdit.text());
- data.endGroup();
- data.beginGroup("详细信息");
- data.setValue("地址",widget2.addressEdit.text());
- data.setValue("工作",widget2.jobEdit.text());
- data.setValue("介绍",widget2.introductionEdit.toPlainText());
- data.endGroup();
- close();
- }
widget1.h
- #ifndef WIDGET1_H
- #define WIDGET1_H
- #include <QWidget>
- #include <QLineEdit>
- #include <QVBoxLayout>
- #include <QHBoxLayout>
- #include <QLabel>
- #include <QTextCodec>
- class Widget1 : public QWidget
- {
- public:
- Widget1();
- QLabel nickNameLabel;
- QLineEdit nickNameEdit;
- QLabel accountLabel;
- QLineEdit accountEdit;
- QLabel mailLabel;
- QLineEdit mailEdit;
- private:
- QVBoxLayout nickNameLayout;
- QVBoxLayout accountLayout;
- QVBoxLayout mailLayout;
- QVBoxLayout vLayout;
- QHBoxLayout hLayout;
- };
- #endif // WIDGET1_H
widget1.cpp
- #include "widget1.h"
- Widget1::Widget1()
- {
- /*设置中文显示编码,否则为乱码*/
- QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "utf8"));
- nickNameLabel.setText("昵称");
- //nickNameEdit.setText("");
- accountLabel.setText("帐号");
- //accountEdit;
- mailLabel.setText("邮箱");
- // mailEdit;
- // nickNameLayout.addStretch();
- nickNameLayout.addWidget(&nickNameLabel);
- nickNameLayout.addWidget(&nickNameEdit);
- nickNameLayout.addStretch();
- accountLayout.addWidget(&accountLabel);
- accountLayout.addWidget(&accountEdit);
- accountLayout.addStretch();
- mailLayout.addWidget(&mailLabel);
- mailLayout.addWidget(&mailEdit);
- mailLayout.addStretch();
- hLayout.addLayout(&nickNameLayout);
- hLayout.addLayout(&accountLayout);
- vLayout.addLayout(&hLayout,1);
- vLayout.addLayout(&mailLayout,1);
- vLayout.addStretch(5);
- setLayout(&vLayout);
- }
widget2.h
- #ifndef WIDGET2_H
- #define WIDGET2_H
- #include <QWidget>
- #include <QLineEdit>
- #include <QVBoxLayout>
- #include <QHBoxLayout>
- #include <QLabel>
- #include <QTextCodec>
- #include <QTextEdit>
- class Widget2 : public QWidget
- {
- public:
- Widget2();
- QLabel addressLabel;
- QLineEdit addressEdit;
- QLabel jobLabel;
- QLineEdit jobEdit;
- QLabel introductionLabel;
- QTextEdit introductionEdit;
- private:
- QVBoxLayout addressLayout;
- QVBoxLayout jobLayout;
- QVBoxLayout introductionLayout;
- QVBoxLayout vLayout;
- QHBoxLayout hLayout;
- };
- #endif // WIDGET2_H
widget2.cpp
- #include "widget2.h"
- Widget2::Widget2()
- {
- /*设置中文显示编码,否则为乱码*/
- QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "utf8"));
- addressLabel.setText("地址");
- jobLabel.setText("工作");
- introductionLabel.setText("介绍");
- addressLayout.addWidget(&addressLabel);
- addressLayout.addWidget(&addressEdit);
- addressLayout.addStretch();
- jobLayout.addWidget(&jobLabel);
- jobLayout.addWidget(&jobEdit);
- jobLayout.addStretch();
- introductionLayout.addWidget(&introductionLabel);
- introductionLayout.addWidget(&introductionEdit);
- introductionLayout.addStretch();
- vLayout.addLayout(&addressLayout,1);
- vLayout.addLayout(&jobLayout,1);
- vLayout.addLayout(&introductionLayout,5);
- vLayout.addStretch(5);
- setLayout(&vLayout);
- }