qt - 如何保持两个并行 Qsplitter 大小相等?

标签 qt layout signals-slots

我有一个 Qt 小部件,有四个分区,用拆分器分隔。 最顶层是一个垂直分割器,改变两个水平分割器topSplitter和bottomSplitter的高度。

如何保持两个水平分离器的位置相等,就好像它只是一个水平分离器一样? 我查看了 splitterMoved 的链接信号,并将其连接到另一个拆分器上的插槽,但拆分器类中没有等效的插槽。

这显然必须避免无限循环的问题,即一个分离器的位置更新第二个分离器,第二个分离器更新第一个分离器。

最佳答案

这非常简单。初始化(splitter1splitter2是需要同步的splitter):

connect(ui->splitter1, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved()));
connect(ui->splitter2, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved()));

插槽:

void MainWindow::splitterMoved() {
  QSplitter* senderSplitter = static_cast<QSplitter*>(sender());
  QSplitter* receiverSplitter = senderSplitter == ui->splitter1 ? 
     ui->splitter2 : ui->splitter1;
  receiverSplitter->blockSignals(true);
  receiverSplitter->setSizes(senderSplitter->sizes());
  receiverSplitter->blockSignals(false);
}

blockSignals 确保调用不会无限递归。实际上,setSizes 不会导致发出 splitterMoved,因此您可以删除两个 blockSigals 调用,代码仍然可以工作。但是,文档中没有对此进行说明,因此我不会依赖它。

关于qt - 如何保持两个并行 Qsplitter 大小相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22325041/

相关文章:

c++ - QObject::connect: 无法对 MyClass*const 类型的参数进行排队

c++ - 跨平台自动运行

python - PyQt Python - 为 QPushButton 创建鼠标右键单击

qt - 在 QML 中动态创建按钮

android - 呈现问题 : Android Studio 2. 2 - 约束布局

wpf - 在 WPF 中重新创建 WinForms 布局

flutter - Flutter中不使用Container是否可以做margin

python - 如何将参数传递给信号中的函数?

c++ - Qt中的图像绘制

c++ - QMYSQL 驱动未加载 Qt 5.6 Linux Ubuntu 16.04