小编c_k*_*c_k的帖子

与Qt 4.8相比,为什么FlowLayout在Qt 5.2中的表现不同?

我刚刚将我的应用程序从Qt 4.8.4移植到Qt 5.2.1.我在Qt文档FlowLayout中的FlowLayout示例代码中提供了类的问题.

我有QMainWindow一个QDockWidget停靠在中央部件的底部.该QDockWidgetFlowLayout几个子部件.在Qt 4.8中,这就像一个魅力,儿童小工具的大小符合标准尺寸DockWidget.但是,在Qt 5.2中,DockWidget尝试将其大小增加到最大值(从中央小部件取代).更改其布局可防止此不良行为.但当然,我FlowLayout是故意使用的.

为了说明这个问题,我创建了一个最小的例子:

构造函数DockWidget:

    QGroupBox *generalBox = new QGroupBox("");
    generalBoxLayout = new FlowLayout;
    generalBox->setLayout(generalBoxLayout);

    for(int i=0; i<10; ++i)
    {
        QPushButton *button = new QPushButton("Test", this);
        button->setMinimumWidth(100);
        button->setMinimumHeight(100);
        generalBoxLayout->addWidget(button);
    }

    this->setWidget(generalBox);
Run Code Online (Sandbox Code Playgroud)

有人知道问题是什么以及我如何解决它?

编辑 我创建了一个新的最小工作示例,遗憾的是无法重现Qt 4.8和Qt 5.2之间的差异.同样的问题出现在Qt 4.8中,所以我仍然想在这里介绍它:

显示底部停靠的dockwidget占据整个垂直空间的初始视图: 显示底部停靠的dockwidget的初始视图

使用鼠标调整dockwidget的大小后查看 使用鼠标调整dockwidget的大小后查看

使用鼠标调整主窗口大小后查看 使用鼠标调整主窗口大小后查看

这些屏幕截图显示,在手动更改dockwidget的大小后,dockwidgets的行为与预期一致.但是,在初始化时,窗口小部件从中央窗口小部件获取所有可用空间,这是不希望的.

有人知道解决方案/解决方法吗?

qt qt4 flowlayout qdockwidget qt5

26
推荐指数
1
解决办法
2108
查看次数

与Qwt相比,QCustomPlot有哪些优点/缺点?

我现在使用Qwt已经两年了.我喜欢它的面向对象的类,这使得很容易适应这些图和功能.如今,QCustomPlot正变得越来越受欢迎,并与Qwt竞争.当然我确实比较了API.但是,我对两个图书馆的有经验的用户的证词感兴趣.什么方便?什么不是?有任何陷阱吗?

plot qt qwt qcustomplot

17
推荐指数
4
解决办法
2万
查看次数

将算术运算应用于IronPython中的System.Array的最快方法

我想System.Array在IronPython中添加(算术)两个大元素元素并将结果存储在第一个数组中,如下所示:

    for i in range(0:ArrA.Count) :
      arrA.SetValue(i, arrA.GetValue(i) + arrB.GetValue(i));
Run Code Online (Sandbox Code Playgroud)

但是,这似乎很慢.有C背景我想使用指针或迭代器.但是,我不知道如何快速应用IronPython习语.我不能使用Python列表,因为我的对象严格来自System.Array类型.类型是3d浮点数.

什么是紧固件/计算此计算的快速方法?

编辑:

  • 元素的数量是适当的.256 ^ 3.
  • 3d float意味着可以像这样访问数组:array.GetValue(indexX,indexY,indexZ).我不确定IronPython的System.Array中各自的内存是如何组织的.
  • 背景:我编写了一个IronPython API接口,可以在仿真软件工具中访问数据.我检索3d标量数据并将其累积到我的IronPython脚本中的时间数组中.累积执行10,000次并且应该很快,因此模拟不需要很长时间.

ironpython iterator system.array

8
推荐指数
1
解决办法
184
查看次数

如何使用QTcpSocket高频率发送小数据包?

我们有两个Qt应用程序.App1接受来自App2的连接,QTcpServer并将其存储在一个实例中QTcpSocket* tcpSocket.App1运行30 Hz的模拟.对于每次模拟运行,QByteArray使用以下代码(来自主/ GUI线程)发送包含几千字节的数字:

    QByteArray block;
    /* lines omitted which write data into block */
    tcpSocket->write(block, block.size());
    tcpSocket->waitForBytesWritten(1);
Run Code Online (Sandbox Code Playgroud)

接收器套接字侦听QTcpSocket :: readDataBlock信号(在主/ GUI线程中)并将相应的时间戳打印到GUI.

当App1和App2在同一系统上运行时,这些包完全同步.但是,当App1和App2在通过网络连接的不同系统上运行时,App2不再与App2中的模拟同步.包裹的速度要慢得多.更令人惊讶的是(并且表明我们的实现是错误的)事实是当我们停止模拟循环时,不再接收到包.这让我们感到惊讶,因为我们期望从TCP协议中最终到达所有包.

我们基于Qt的财富示例构建了TCP逻辑.然而,财富服务器是不同的,因为它每个传入的客户端只发送一个包.有人可以确定我们做错了什么吗?

注意:我们使用MSVC2012(App1),MSVC2010(App2)和Qt 5.2.

编辑:对于一个包我的意思是单个模拟实验的结果,这是一堆数字,写入QByteArray block.但是,第一位包含QByteArray的长度,以便客户端可以检查是否已收到所有数据.这是发出信号QTcpSocket :: readDataBlock时调用的代码:

    QDataStream in(tcpSocket);
    in.setVersion(QDataStream::Qt_5_2);

    if (blockSize == 0) {
      if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
         return; // cannot yet read size from data block

      in >> blockSize; // read data size for data block
    }

    // if the whole data block is …
Run Code Online (Sandbox Code Playgroud)

sockets qt tcp qtcpsocket

5
推荐指数
1
解决办法
3949
查看次数