【发布时间】:2013-06-11 22:57:17
【问题描述】:
我有一个类,它使用垂直的 QSplitter 来分隔两个重要的小部件(箭头指针在拆分器位置):
上面的子小部件是 QTextEdit,而下面的子小部件是与我的应用程序标记系统交互的自定义小部件。较低的孩子默认折叠;它仅在用户单击标签工具栏按钮或向上拖动拆分器时显示。当按钮打开时,会显示较低的孩子,否则它会保持隐藏状态。
工具栏按钮工作正常,但现在我无法通过将分隔栏一直向下拖动来检测用户何时折叠下孩子。当用户手动折叠较低的孩子时,这会导致工具栏按钮保持打开状态。反之亦然;当用户向上拖动拆分器时,按钮保持关闭状态。
我已经尝试将 QSplitter:splitterMoved(int pos,int index) 信号连接到一个插槽,该插槽可以在较低的子项(索引 1)手动折叠(位置 0)时取消切换按钮,但由于某种原因信号永远不会被发出。
我的代码(拆分器对象称为divide)连接这个信号...
connect(divide, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved(int pos, int index)));
...到这个插槽:
void Editor::splitterMoved(int pos, int index){
using namespace std;
if((index==1) && (pos==0)){
ui->TagButton->setChecked(false);
}
else{
ui->TagButton->setChecked(true);
}
}
我用错了吗?无论我对分离器做什么,该插槽目前什么都不做。有没有更好的方法来解决这个问题?
【问题讨论】:
-
我遇到了同样的问题并通过
QSplitter::setChildrenCollapsible(false);解决了它。和一个信号槽机制来调用QSplitter::setSize()子大小的变化。似乎“崩溃”是一种特殊状态,即使在子大小扩展时也会存在。 (我知道,2 年后,但其他重定向到这个问题的人可能会觉得这很有帮助)