精通Qt4编程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.2 分裂器部件QSplitter

Qt的分裂器QSplitter可以包含其他窗口部件并且通过分裂柄分隔其中的子窗口部件。用户可以通过拖动分裂柄改变分裂器的子窗口部件的大小。对用户来讲,使用分裂器管理GUI窗口部件比布局管理器更方便灵活,用户可以自由地改变窗口部件的大小。

Qt设计器提供了对分裂器的支持。在Qt设计器中,在顶层窗口部件中,加入两个QTextEdit窗口部件textEdit1和textEdit2,下面将这两个窗口部件水平加入到一个分裂器中:

同时选中两个QTextEdit窗口部件:textEdit1和textEdit2。

单击工具按钮“Lay Out Horizontal in Splitter”,或者在选中的窗口部件上单击鼠标右键,选择弹出的上下文菜单“Lay Out”|“Lay Out Horizontaly in Splitter”(如图5-11所示)。加入到一个分裂器的显示效果如图5-12所示。

图5-11 Qt设计器中的分裂器按钮和菜单

图5-12 两个窗口部件水平加入到一个分裂器

在Qt设计器的对象监视器中,可以看到有一个名字为splitter的分裂器QSplitter对象,在程序中可以引用该对象完成对分裂器的操作。通过同样的方法也可以将窗口部件垂直放置在一个分裂器中。此外还可以进行分裂器的嵌套,比如将两个水平放置QTextEdit窗口部件的分裂器垂直排列到一个新的分裂器,如图5-13所示。

图5-13 分裂器的嵌套

使用代码实现上述功能也很简单,代码如下。

        QSplitter* splitte1 = new QSplitter(Qt::Horizontal);
        QTextEdit*  editor1 = new QTextEdit;
        QTextEdit*  editor2 = new QTextEdit;
        splitter.addWidget(editor1);
        splitter.addWidget(editor2);
        QSplitter* splitter2 = new QSplitter(Qt::Horizontal);
        QTextEdit*  editor3 = new QTextEdit;
        QTextEdit*  editor4 = new QTextEdit;
        splitter2.addWidget(editor3);
        splitter2.addWidget(editor4);

        QSplitter* splitter = new QSplitter(Qt::vertical);
        splitter.addWidget(splitte1);
        splitter.addWidget(splitte2);

QSplitter构造函数的参数指定了分裂器子窗口部件的排列方向:

● Qt::Horizontal,按水平方向排列;

● Qt::Vertical,按垂直方向排列。