先给子控件设置它依赖于哪一个控件上显示
void setTableViewParent(QWidget *parent = 0);
void ComplexCombox::setTableViewParent(QWidget *parent)
{
m_tableView->setParent(parent);
m_tableView->setVisible(false);
}
设置坐标的时候,就会相对那个控件的坐标显示
m_tableView->setGeometry(x,y,414,290);
示例:
complexCombox->setTableViewParent(ui->groupBox_3);
complexCombox->setTableViewPos(ui->groupBox_3->pos().x()+15,ui->groupBox_3->pos().y()+150);
这样的话,不管怎么移动窗口,tableview显示的坐标都跟着groupBox的坐标而移动。
补充一下QT里坐标系的知识:
- 绝对位置:相对于桌面窗口原点(0,0)的位置
- 相对位置:相对于应用程序原点(0,0)的位置
与鼠标位置有关的3个方法
- QCursor::pos() 的结果是鼠标相对于桌面的绝对位置
- mousePressEvent的参数event的位置,event->pos() 是鼠标相对于应用程序的位置
- event->globalPos() 相对于桌面原点的位置,绝对位置
示例:
void Qt_Pos::MainWindow(QMouseEvent* event)
{
QPoint p1 = QCursor::pos();
QString str1 = QString::number(p1.x()) + " , " + QString::number(p1.y());
QPoint p2 = event->pos();
QString str2 = QString::number(p2.x()) + " , " + QString::number(p2.y());
QPoint p3 = event->globalPos(); //相对于桌面原点的位置
QString str3 = QString::number(p3.x()) + " , " + QString::number(p3.y());
}
Qt是如何获取控件的相对位置示例:
QPoint p4 = ui.pushButton->pos(); //按钮控件相对于窗口原点的位置
Qt是如何获取控件的绝对位置示例:
QPoint p5 = ui.pushButton->mapToGlobal(QPoint(0, 0)); //按钮相对于桌面原点的绝对位置
控件的大小:
QRect rect = ui.pushButton->rect();
QString str6 = QString::number(rect.width()) + " , " + QString::number(rect.height());