2012-01-12 54 views
3

有没有人遇到将按钮(或任何其他小工具)放在分离器手柄顶部的问题?我试图找到句柄,设置它的布局并将控件放在那里,但是我看起来很怪异。qt - 如何制作带有一组按钮的分离器?

我的主要目标是创建一个选择对话框,描述如下:Dialog example

我能得到什么:
​​

代码:

QDialog dialog = new QDialog(); 
dialog.setLayout(new QVBoxLayout()); 
QSplitter splitter = new QSplitter(); 

splitter.setSizePolicy(new QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Fixed)); 
splitter.addWidget(new QListWidget()); 
splitter.addWidget(new QTableWidget()); 
dialog.layout().addWidget(splitter); 

QSplitterHandle h = splitter.handle(1); 
h.setFixedWidth(30); // I added this line to show the splitter handle 
QVBoxLayout lt = new QVBoxLayout(); 
lt.setSpacing(0); 
lt.setMargin(0); 
lt.addWidget(new QPushButton("Hello", dialog)); 
lt.addWidget(new QPushButton("Good bye", dialog)); 
h.setLayout(lt); 

dialog.show(); 
+0

它对我来说非常有用。你可以发布你的截图吗? – graphite 2012-01-12 08:36:15

+0

你使用的是什么Jambi版本? – Smar 2012-01-12 21:08:07

+0

@Smar,版本是4.5.2 – 2012-01-13 06:15:28

回答

2

这给了更好的结果:

// h.setFixedWidth(30); 
splitter.setHandleWidth(30); 

为了更好的结果,我建议子类QSplitterHandle和重新实现sizeHint()。看看QSplitterHandle documentation

您可以更改布局设置以获得确切的按钮位置。 例如:

lt.addStrecth(); 

要删除 “救济” -bar必须从QSplitterHandle继承并重新实现paintEvent()

+0

稍好一些,但不适合。你知道如何避免通过处理“救济”来分离小部件吗? – 2012-01-12 10:54:15

+0

@AndreyAtapin它对小部件没有影响。按钮位置由布局控制。 – graphite 2012-01-12 11:22:13

+0

是的,我知道。顺便说一句,你使用哪个操作系统? – 2012-01-13 06:14:03