欢迎小伙伴的点评✨✨,相互学习、互关必回、全天在线🍳🍳🍳
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩🚀
本章节将会给大家带来堆栈窗体(QSplitter类)的详细使用方法
一个十分简单的分割窗口功能,整个窗口由三个子窗口组成,各个子窗口之间的大小可随意拖曳改变,效果如图 一 所示。
图一

#include "widget.h"
#include
#include
#include
int main(int argc, char *argv[])
{
//QApplication a(argc, argv);
//Widget w;
//w.show();
QApplication a(argc, argv);
//主分割窗口
QFont font ("ZYSongl8030", 40);
a.setFont(font);
QSplitter *splitterMain =new QSplitter (Qt::Horizontal, 0); //(a)
QTextEdit *textLeft =new QTextEdit (QObject::tr("Qao Yi Bo Yi 1"), splitterMain); //(b)
textLeft->setAlignment(Qt::AlignCenter);
//右分割窗口
QSplitter *splitterRight =new QSplitter (Qt::Vertical, splitterMain); // (d)
splitterRight->setOpaqueResize(false); //(e)
QTextEdit *textUp = new QTextEdit(QObject::tr("Qao Yi Bo Yi 2"), splitterRight);
textUp->setAlignment(Qt::AlignCenter);
QTextEdit *textBottom =new QTextEdit(QObject::tr("Qao Yi Bo Yi 3"),splitterRight);
textBottom->setAlignment(Qt::AlignCenter);
splitterMain->setStretchFactor(1,1);
splitterMain->setWindowTitle(QObject::tr("Splitter")); //声明主窗口的名称
splitterMain->show();
return a.exec();
}
其中,
(a)QSplitter *splitterMain =new QSplitter (Qt::Horizontal, 0); 新建一个 QSplitter 类对象,
作为主分割窗口,设定此分割窗口为水平分割窗口。
(b)QTextEdit *textLeft =new QTextEdit (QObject::tr(“Qao Yi Bo Yi 1”), splitterMain); 新建一个
QTextEdit 类对象,并将其插入主分割窗口中。
(c)textLeft->setAlignment(Qt::AlignCenter);设定 TextEdit 中文字的对齐方式,常用的对齐方式有以下几种。
通过上述描述,可理解到,窗口的分割是填充不同的类进行形分割如三个QTextEdit 类,因此我们只需要把控件用类的形式进行封装,展现到窗口上即可,实例如图二。
图二

#ifndef LEFT_H
#define LEFT_H
#include
#include
#include
#include
#include
#include
#include
#include
namespace Ui {
class Widget;
}
class left : public QWidget
{
Q_OBJECT
public:
explicit left(QWidget *parent = nullptr);
~left();
private:
QPushButton *button,*button1;
QLineEdit *edit1,*edit2,*edit3,*edit4;
QGridLayout *layout;
private slots:
void on_clicked();
void on_clicked1();
public:
void myLayout();
private:
Ui::Widget *ui;
};
#endif // LEFT_H
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
#include
#include
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
QSplitter *psp;
left *ps;
QTextEdit *text;
};
#endif // WIDGET_H
#include "left.h"
#include "ui_widget.h"
left::left(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
myLayout();
}
left::~left()
{
delete ui;
}
void left::myLayout()
{
button = new QPushButton;
button1 = new QPushButton;
layout = new QGridLayout(this);
edit1 = new QLineEdit;
edit2 = new QLineEdit;
edit3 = new QLineEdit;
edit4 = new QLineEdit;
button1->setText("清除");
button->setText("结果");
connect(button,SIGNAL(clicked(bool)),this,SLOT(on_clicked())); //连接按钮
connect(button1,SIGNAL(clicked(bool)),this,SLOT(on_clicked1()));
layout->addWidget(button,1,0,Qt::Alignment()); //初始化画图
layout->addWidget(edit1,0,0,Qt::Alignment());
layout->addWidget(edit2,0,1,Qt::Alignment());
layout->addWidget(edit3,0,2,Qt::Alignment());
layout->addWidget(edit4,1,1,Qt::Alignment());
layout->addWidget(button1,1,2,Qt::Alignment());
}
void left::on_clicked() //计算大小
{
int a = edit1->text().toInt();
int b = edit3->text().toInt();
QString c = edit2->text();
if(c=="+")
{
edit4->setText(QString::number(a+b));
}
if(c=="-")
{
edit4->setText(QString::number(a-b));
}
if(c=="*")
{
edit4->setText(QString::number(a*b));
}
if(c=="/")
{
edit4->setText(QString::number(a/b));
}
}
void left::on_clicked1() //清除
{
edit1->clear();
edit2->clear();
edit3->clear();
edit4->clear();
}
#include "widget.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
return a.exec();
}
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ps = new left();
text = new QTextEdit;
psp = new QSplitter(Qt::Horizontal,nullptr);
psp->addWidget(ps);
psp->addWidget(text);
psp->show();
}
Widget::~Widget()
{
delete ui;
}
分割窗口可使用控件及类填充进行分割,在Qt当中控件实际上就是Qt官方封装的类工程文件已经上传GitHub、Git Bash Here 拉取命令如下
git clone https://github.com/dhn111/Qt.git