上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,按垂直方向排列。