Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何保持两个平行的QSplitter大小相等?_Qt_Layout_Signals Slots - Fatal编程技术网

Qt 如何保持两个平行的QSplitter大小相等?

Qt 如何保持两个平行的QSplitter大小相等?,qt,layout,signals-slots,Qt,Layout,Signals Slots,我有一个Qt小部件,有四个分区,用拆分器隔开。 顶层是一个垂直拆分器,可改变两个水平拆分器(上拆分器和下拆分器)的高度 如何保持两个水平拆分器的位置相等,就好像它只是一个水平拆分器一样? 我查看了splitterMoved的链接信号,并将其连接到另一个拆分器上的插槽,但在拆分器类中没有等效的插槽 这显然必须避免出现无限循环的问题,其中一个拆分器的位置更新了第二个拆分器的位置,而第二个拆分器的位置更新了第一个拆分器。在包含的小部件中,您可以创建插槽以连接到splitterMoved信号 每个拆分器

我有一个Qt小部件,有四个分区,用拆分器隔开。 顶层是一个垂直拆分器,可改变两个水平拆分器(上拆分器和下拆分器)的高度

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


这显然必须避免出现无限循环的问题,其中一个拆分器的位置更新了第二个拆分器的位置,而第二个拆分器的位置更新了第一个拆分器。

在包含的小部件中,您可以创建插槽以连接到splitterMoved信号

每个拆分器需要一个插槽,需要检查拆分器的大小是否正确(以避免无限循环),然后根据需要更新大小

我只包括一个示例插槽和连接,但每个需要链接的拆分器都需要一个。 将以下内容放入新插槽以更新拆分器位置

QList<int> OtherSize,Current;
OtherSize=topSplitter->sizes();
Current=bottomSplitter->sizes();
if(OtherSize!=Current)
{
    bottomSplitter->setSizes(OtherSize);
}
忽略信号提供的位置和索引是安全的,因为我们在此插槽中以不同的方式检查大小

这将设置所有尺寸,以便所有拆分条都匹配位置。
如果只有两个,则无所谓,但如果有两个以上,则在移动任何条时,所有条都将更新以匹配。

在包含的小部件中,您可以创建插槽以连接到splitterMoved信号

每个拆分器需要一个插槽,需要检查拆分器的大小是否正确(以避免无限循环),然后根据需要更新大小

我只包括一个示例插槽和连接,但每个需要链接的拆分器都需要一个。 将以下内容放入新插槽以更新拆分器位置

QList<int> OtherSize,Current;
OtherSize=topSplitter->sizes();
Current=bottomSplitter->sizes();
if(OtherSize!=Current)
{
    bottomSplitter->setSizes(OtherSize);
}
忽略信号提供的位置和索引是安全的,因为我们在此插槽中以不同的方式检查大小

这将设置所有尺寸,以便所有拆分条都匹配位置。
如果只有两个,则无所谓,但如果有两个以上,则在移动任何条时,所有条都将更新以匹配。

在包含的小部件中,您可以创建插槽以连接到splitterMoved信号

每个拆分器需要一个插槽,需要检查拆分器的大小是否正确(以避免无限循环),然后根据需要更新大小

我只包括一个示例插槽和连接,但每个需要链接的拆分器都需要一个。 将以下内容放入新插槽以更新拆分器位置

QList<int> OtherSize,Current;
OtherSize=topSplitter->sizes();
Current=bottomSplitter->sizes();
if(OtherSize!=Current)
{
    bottomSplitter->setSizes(OtherSize);
}
忽略信号提供的位置和索引是安全的,因为我们在此插槽中以不同的方式检查大小

这将设置所有尺寸,以便所有拆分条都匹配位置。
如果只有两个,则无所谓,但如果有两个以上,则在移动任何条时,所有条都将更新以匹配。

在包含的小部件中,您可以创建插槽以连接到splitterMoved信号

每个拆分器需要一个插槽,需要检查拆分器的大小是否正确(以避免无限循环),然后根据需要更新大小

我只包括一个示例插槽和连接,但每个需要链接的拆分器都需要一个。 将以下内容放入新插槽以更新拆分器位置

QList<int> OtherSize,Current;
OtherSize=topSplitter->sizes();
Current=bottomSplitter->sizes();
if(OtherSize!=Current)
{
    bottomSplitter->setSizes(OtherSize);
}
忽略信号提供的位置和索引是安全的,因为我们在此插槽中以不同的方式检查大小

这将设置所有尺寸,以便所有拆分条都匹配位置。
如果只有两个,那没关系,但是如果有两个以上,当任何一个条被移动时,所有条都会被更新以匹配。

这很简单。初始化(
splitter1
splitter2
是需要同步的拆分器):

插槽:

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);
}
void主窗口::splitterMoved(){
QSplitter*senderSplitter=static_cast(sender());
QSplitter*receiverSplitter=senderSplitter==ui->splitter1?
ui->splitter2:ui->splitter1;
接收器拆分器->块信号(真);
接收器拆分器->设置大小(发送器拆分器->大小();
接收器拆分器->块信号(假);
}

blockSignals
确保调用不会进入无限递归。实际上,
setSizes
不会导致发出
splitterMoved
,因此您可以删除这两个
blockSigals
调用,代码仍然可以工作。但是,文档中没有关于这一点的注释,因此我不会依赖它。

这非常简单。初始化(
splitter1
splitter2
是需要同步的拆分器):

插槽:

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);
}
void主窗口::splitterMoved(){
QSplitter*senderSplitter=static_cast(sender());
QSplitter*receiverSplitter=senderSplitter==ui->splitter1?
ui->splitter2:ui->splitter1;
接收器拆分器->块信号(真);
接收器拆分器->设置大小(发送器拆分器->大小();
接收器拆分器->块信号(假);
}

blockSignals
确保调用不会进入无限递归。实际上,
setSizes
不会导致发出
splitterMoved
,因此您可以删除这两个
blockSigals
调用,代码仍然可以工作。但是,文档中没有关于这一点的注释,因此我不会依赖它。

这非常简单。初始化(
splitter1
splitter2
是需要同步的拆分器):

插槽:

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);
}
void主窗口::splitterMoved(){
QSplitter*senderSplitter=static_cast(sender());
QSplitter*receiverSplitter=senderSplitter==ui->splitter1?
用户界面->拆分