作者:单莼de笑脸 | 来源:互联网 | 2023-07-25 12:09
1.qt开发中,想要主界面全屏,其他界面可以在主界面之上显示:
这个如果是全部用QWidget开发的应该有很多办法可以实现,但是如果用的QOpenGLWidget做的主界面,就会出现其他界面无法占有上层的现象,这里需要使用QWindowsWindowFunctions::setHasBorderInFullScreen(tlwWindow->windowHandle(), true);
来解决,官方问题方案:https://doc.qt.io/qt-5/windows-issues.html#fullscreen-opengl-based-windows。
2.想要获取同一个QTreeWidgetItem中的控件:
比如QTreeWidgetItem中添加了一个combobox和一个button,那么可以通过:combox->setProperty("item", QVariant::fromValue((void*)item));
给combobox设置属性,再通过:QComboBox* combo = qobject_cast(sender());
获取到当前操作的combobox,然后:QTreeWidgetItem* item = (QTreeWidgetItem*)(combo->property("item")).value();
就可以拿到对应的QTreeWidgetItem了。
那么怎么拿到其他控件呢,可以把每个控件添加到item属性中:item->setData(2, Qt::UserRole + 1, QVariant::fromValue(combox));
这样就可以通过item的data拿到对应的控件了:QComboBox* cbx = item->data(2, Qt::UserRole + 1).value();
其他同样操作即可,但是Qt::UserRole + 1需要不同。
3.
(1)mqtt可以同时订阅多个主题,这样不同主题发送的消息就可以同时处理了。
&#xff08;2&#xff09;mqtt的pulish函数发送QByteArray&#xff0c;但是如果是自定义的数据类型就不能通过简单的转换发送&#xff0c;否则会改变数据&#xff0c;比如自定义一个结构体&#xff0c;里面有QString类型&#xff0c;这就需要使用QDataStream来进行转换&#xff0c;关键点就是重写QDataStream &operator<<
和QDataStream &operator>>
&#xff0c;用来转换自定义数据类型。参考&#xff1a;https://blog.csdn.net/wangyeqiang/article/details/8272912
4.QDomDocument读写xml&#xff1a;
读写过程倒是很多方法&#xff0c;但是修改节点就会遇到一个小问题&#xff0c;需要将修改的节点replace掉&#xff0c;就是可以将要修改的节点获取为oldnode&#xff0c;修改之后赋值给newnode&#xff0c;再通过replace修改。另一个小问题&#xff0c;QDomNode的nodeValue()为空&#xff0c;这里需要使用node.firstChild().nodeValue()&#xff0c;其中隐藏了一个text的子节点。参考&#xff1a;https://www.dazhuanlan.com/emedigqq/topics/949790
5.如果添加到layout中的控件叠加了&#xff0c;可以试试layout->**setSizeConstraint(QLayout::SetFixedSize)**
;
6.form->setAttribute(Qt::WA_DeleteOnClose);
可以让你new出来的widget在点击x号关闭时被删除释放&#xff0c;否则可能只是隐藏了。
7.如果添加到控件中的图像被切割&#xff0c;可以进行缩放&#xff1a;QPixmap scaledPixmap &#61; pixmap.scaled(this->canvas->maximumSize(), Qt::KeepAspectRatio);