当前位置: 代码迷 >> 综合 >> QDateTimeEdit的下拉按钮事件响应
  详细解决方案

QDateTimeEdit的下拉按钮事件响应

热度:29   发布时间:2024-02-08 23:08:28.0

源码中的例子

    QStyleOptionComboBox optCombo;optCombo.init(this);optCombo.editable = true;optCombo.subControls = QStyle::SC_All;if(QStyle::SC_ComboBoxArrow == this->style()->hitTestComplexControl(QStyle::CC_ComboBox, &optCombo, event->pos(), this)) {

源码获取下拉窗口的位置

void QDateTimeEditPrivate::positionCalendarPopup()
{Q_Q(QDateTimeEdit);QPoint pos = (q->layoutDirection() == Qt::RightToLeft) ? q->rect().bottomRight() : q->rect().bottomLeft();QPoint pos2 = (q->layoutDirection() == Qt::RightToLeft) ? q->rect().topRight() : q->rect().topLeft();pos = q->mapToGlobal(pos);pos2 = q->mapToGlobal(pos2);QSize size = monthCalendar->sizeHint();QRect screen = QApplication::desktop()->availableGeometry(pos);//handle popup falling "off screen"if (q->layoutDirection() == Qt::RightToLeft) {pos.setX(pos.x()-size.width());pos2.setX(pos2.x()-size.width());if (pos.x() < screen.left())pos.setX(qMax(pos.x(), screen.left()));else if (pos.x()+size.width() > screen.right())pos.setX(qMax(pos.x()-size.width(), screen.right()-size.width()));} else {if (pos.x()+size.width() > screen.right())pos.setX(screen.right()-size.width());pos.setX(qMax(pos.x(), screen.left()));}if (pos.y() + size.height() > screen.bottom())pos.setY(pos2.y() - size.height());else if (pos.y() < screen.top())pos.setY(screen.top());if (pos.y() < screen.top())pos.setY(screen.top());if (pos.y()+size.height() > screen.bottom())pos.setY(screen.bottom()-size.height());monthCalendar->move(pos);
}

 

  相关解决方案