QT学习笔记----day06
day01-day05传送门:
day01
day02
day03
day04
day05
今天我来学习一种新的布局:堆栈布局
十、实例十:堆栈布局示例
先看实现效果:
这个类似于在PC上登录微信的时候的那个界面,但是肯定是没有那么复杂的。
没啥好说的,直接上代码:
main.cpp
#include “stackgui.h”
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StackGui w;
w.show();
return a.exec();
}
stackgui.h
#ifndef STACKGUI_H
#define STACKGUI_H
#include <QWidget>
#include <QListWidget> //列表组件
#include <QStackedWidget> //堆栈组件
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QHBoxLayout>
class StackGui : public QWidget
{
Q_OBJECT
public:
StackGui(QWidget *parent = 0);
~StackGui();
};
#endif // STACKGUI_H
stackgui.cpp
#include "stackgui.h"
StackGui::StackGui(QWidget *parent)
: QWidget(parent)
{
this->setWindowTitle("堆栈布局示例");
QListWidget *list = new QListWidget;
list->setFixedWidth(130);
list->addItem("第1个标签");
list->addItem("第2个单行文本框");
list->addItem("第3个文本域");
QLabel *label = new QLabel("我是标签");
QLineEdit *lineedit = new QLineEdit;
QTextEdit *textedit = new QTextEdit;
QStackedWidget *stack = new QStackedWidget;
stack->setFixedWidth(150);
stack->addWidget(label);
stack->addWidget(lineedit);
stack->addWidget(textedit);
this->connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
QHBoxLayout *main_layout = new QHBoxLayout(this);
main_layout->addWidget(list);
main_layout->addWidget(stack);
}
StackGui::~StackGui()
{
}
上面用到的类中,大部分都是之前讲解过的类,只有两个我们比较陌生
QListWidget类 //列表组件
QStackedWidget类 //堆栈组件
QListWidget类 ,这个类很简单,等会儿我们直接看下面示例。
QStackedWidget类实现组件层叠,但它是一个组件,而不是一个容器。 继承层次结构如下所示:
(QObject,QPaintDevice) - QWidget - QFrame - QStackedWidget
构造函数:
QStackedWidget(QWidget parent)
常用函数:
addWidget( ),insertWidget( ), removeWidget( ), replaceWidget( ), count( ), currentIndex( ),currentWidget( ),widget( ),setCurrentIndex( )和setCurrentWidget( )等。
QStackedWidget类中新增的方法有:
indexOf(QWidget widget) - 返回组件的索引;
len() - 返回组件的数量,调用len( )时调用。
跟踪组件中的变化,可处理currentChanged和widgetRemoved信号。
使用:
1.先创建组件:
QListWidget *list = new QListWidget;
list->setFixedWidth(130);
list->addItem("第1个标签");
list->addItem("第2个单行文本框");
list->addItem("第3个文本域");
2.再创建堆栈组件:
QLabel *label = new QLabel("我是标签");
QLineEdit *lineedit = new QLineEdit;
QTextEdit *textedit = new QTextEdit;
QStackedWidget *stack = new QStackedWidget;
stack->setFixedWidth(150);
stack->addWidget(label);
stack->addWidget(lineedit);
stack->addWidget(textedit);
this->connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
3.在将列表组件和堆栈组件放到一个水平布局里面去:
QHBoxLayout *main_layout = new QHBoxLayout(this);
main_layout->addWidget(list);
main_layout->addWidget(stack);
看着是不是很简单,哈哈哈。
声明一下:这是学习笔记,难免会引用到别人的一些东西(一般都是些概念性的东西),如有冒犯,请您见谅。