QT使用中的一些记录
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<QComboBox*>(sender()); 獲取到當前操作的combobox,然后:QTreeWidgetItem* item = (QTreeWidgetItem*)(combo->property("item")).value<void*>(); 就可以拿到對應的QTreeWidgetItem了。
那么怎么拿到其他控件呢,可以把每個控件添加到item屬性中:item->setData(2, Qt::UserRole + 1, QVariant::fromValue(combox)); 這樣就可以通過item的data拿到對應的控件了:QComboBox* cbx = item->data(2, Qt::UserRole + 1).value<QComboBox*>(); 其他同樣操作即可,但是Qt::UserRole + 1需要不同。
3.
(1)mqtt可以同時訂閱多個主題,這樣不同主題發送的消息就可以同時處理了。
(2)mqtt的pulish函數發送QByteArray,但是如果是自定義的數據類型就不能通過簡單的轉換發送,否則會改變數據,比如自定義一個結構體,里面有QString類型,這就需要使用QDataStream來進行轉換,關鍵點就是重寫QDataStream &operator<<和QDataStream &operator>>,用來轉換自定義數據類型。參考:https://blog.csdn.net/wangyeqiang/article/details/8272912
4.QDomDocument讀寫xml:
讀寫過程倒是很多方法,但是修改節點就會遇到一個小問題,需要將修改的節點replace掉,就是可以將要修改的節點獲取為oldnode,修改之后賦值給newnode,再通過replace修改。另一個小問題,QDomNode的nodeValue()為空,這里需要使用node.firstChild().nodeValue(),其中隱藏了一個text的子節點。參考:https://www.dazhuanlan.com/emedigqq/topics/949790
5.如果添加到layout中的控件疊加了,可以試試layout->**setSizeConstraint(QLayout::SetFixedSize)**;
6.form->setAttribute(Qt::WA_DeleteOnClose);可以讓你new出來的widget在點擊x號關閉時被刪除釋放,否則可能只是隱藏了。
7.如果添加到控件中的圖像被切割,可以進行縮放:QPixmap scaledPixmap = pixmap.scaled(this->canvas->maximumSize(), Qt::KeepAspectRatio);
總結
以上是生活随笔為你收集整理的QT使用中的一些记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果挂端口方法_调音台变身直播声卡的方法
- 下一篇: 计算机二级vf上机试题,计算机二级VF上