1,fix viewmodeldelegate not update method paint when mouse hover in macOS or xp
listView_->viewport()->setAttribute(Qt::WA_Hover,true);
2,fix 列表Item重叠
QListWidgetItem *ITEM = new QListWidgetItem();
myLiveListItem->setWidgetItem(ITEM);
QSize size = ITEM->sizeHint();
//ITEM->setSizeHint(QSize(size.width(), 146));
ITEM->setSizeHint(QSize(0, 146));
3,QCheckBox在自定义选中样式,在某些情况下无效时,添加如下:
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
4,监听全屏显示
void MainWindow::changeEvent(QEvent *event)
{
if(event->type() == QEvent::WindowStateChange){
if((windowState() & Qt::WindowFullScreen)){
if(likeWidget_){
likeWidget_->setOffsetBottom(ui->widgetToolBar->height());
}
ui->meetOperatorBtn->hide();
ui->widget->layout()->removeWidget(ui->widgetToolBar);
ui->widgetToolBar->move(0, this->height() - ui->widgetToolBar->height());
}
}
}
5,titlebar的设置(注意下面代码所在的文件后缀需要是.mm)
extern "C" void hideTitleBarButton(WId winId, bool minBtnVisible, bool closeBtnVisible, bool zoomBtnVisible)
{
if (winId == 0) {
return;
}
NSView* view = (NSView*)winId;
NSWindow* window = [view window];
window.titlebarAppearsTransparent = YES;
NSButton *button = [window standardWindowButton:NSWindowMiniaturizeButton];
button.hidden = !minBtnVisible;
button.enabled = minBtnVisible;
button = [window standardWindowButton:NSWindowCloseButton];
button.hidden = !closeBtnVisible;
button.enabled = closeBtnVisible;
button = [window standardWindowButton:NSWindowZoomButton];
button.hidden = !zoomBtnVisible;
button.enabled = zoomBtnVisible;
// NSWindowStyleMaskFullSizeContentView 设置TitleBar不额外占用空间
window.styleMask = NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable
| NSWindowStyleMaskResizable | NSWindowStyleMaskTitled
| NSWindowStyleMaskFullSizeContentView;
}
6,setWindowFlags(Qt::Popup t);mac上点击空白不会消失
修改dialog.exec()为dialog->show()
7,workaround : mac下mouse hover一些情况下一直保持
extern void clearMouseHover(QWidget * widget);
void clearMouseHover(QWidget *widget)
{
#ifdef __APPLE__
if(widget){
widget->setAttribute(Qt::WA_UnderMouse, false);
QHoverEvent hoverEvent(QEvent::HoverLeave, QPoint(40, 40), QPoint(0, 0));
QCoreApplication::sendEvent(widget, &hoverEvent);
}
#endif
}
8,mac上QCombox一条数据时,点击显示下拉框异常
对应的UI上添加样式QComboBox{combobox-popup:0};
或者代码里统一设置
application.setStyleSheet(a.styleSheet() + "QComboBox{combobox-popup:0}");
9,fix mac 主窗体在全屏时(专注模式下)其它子窗体在本屏幕叠加显示
/**
* workaround : mac 主窗体在专注模式下其它子窗体在本屏幕叠加显示
*
* 注意:该方法中subWindow的parent最终会被设置为null
*
* @brief setSubWindowInFullScreenParent
* @param parentWindow 全屏的窗体
* @param subWindow 显示在全屏窗体上的“子窗体”
*/
extern void setSubWindowInFullScreenParent(QWidget * parentWindow , QWidget * subWindow);
void setSubWindowInFullScreenParent(QWidget * parentWindow , QWidget *subWindow)
{
#ifdef __APPLE__
if(parentWindow && parentWindow->isFullScreen() && subWindow){
subWindow->setParent(parentWindow);
subWindow->setParent(nullptr);
subWindow->setWindowFlags(subWindow->windowFlags() | Qt::Dialog);
}
#endif
}
Qt项目移植到mac上一些问题汇总
最新推荐文章于 2024-12-09 14:06:20 发布