QT动态添加按钮(类似于地图上的标点)

1.项目说明

此项目是在开发机器人控制地图过程中的小例子。

要求:1.地图过大时,通过滚动条控件Scroll Area进行滚动;

2.地图坐标是相当于控件的,不是整个界面;

3.点击一下添加一个按钮,并且按钮是固定的;

2.实现

1.在ui界面添加控件

首先在UI界面添加图片中的控件,可以根据自己需求添加,添加Scroll Area是因为地图过大需要通过鼠标控制,label主要是用来显示地图的。

2.固定坐标

添加下面代码可以使滚动条滚动坐标点的坐标不变(大概是这个意思!)

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
    //为了使用滚动条滚动坐标点的坐标固定不动
    ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
}

 3.点击获取位置坐标

鼠标点击获取坐标点,每一行代码都有注释,自行参考根据自己需求更改。

void Form::mouseReleaseEvent(QMouseEvent *event)  //不能使用点击事件,因为和提升界面MyLabel相冲突
{
    //利用QImage获取图片的像素点长度宽度
    QImage image(filename);
    //把坐标点固定不动赋值给sx、sy
    sx=ui->scrollArea->horizontalScrollBar()->value();
    sy=ui->scrollArea->verticalScrollBar()->value();
    //获取坐标点,+sx和sy是为了使坐标点固定,-130和-60是因为坐标是相对于滚动条的,不是Qlabel
    x1=QString("%1").arg(event->x()+sx-image.width()-130);
    y1=QString("%2").arg(event->y()+sy-60);
    //先把x坐标转换成int类型,然后在换成正方向
    QString a(x1);
    int t=a.toInt();
    int x2=0;
    x2=-t;
    //把坐标点显示在pushbutoon
    ui->pushButton_2->setText(QString("( x= %1 , y= %2 )").arg(x2).arg(y1));
    //ui->label_3->setText(tr("(%1,%2)").arg(event->x()+sx-612).arg(event->y()+sy-42));
    //获取坐标点T,N  -130和-60是因为坐标是相对于滚动条的,不是Qlabel
    T=QString("%1").arg(event->x()+sx-130);
    N=QString("%2").arg(event->y()+sy-60);
}

 4.添加按钮

void Form::on_pushButton_3_clicked() //添加标点(按钮)按钮
{
    //把坐标T,N转换成int类型坐标t,n(T,N是为了使按钮显示在点击的坐标【原点:左上角】)
    QString a(T);
    int t = a.toInt();
    QString b(N);
    int n = b.toInt();
    //新建一个Qpushbtoon
    QPushButton *btn = new QPushButton();
    ui->gridLayout->addWidget(btn);
    btn->setGeometry(t,n,20,20);
    btn->setParent(ui->label);  
}

 通过以上代码就可以实现点击一下添加一个按钮,并且按钮固定不动。

注:qt菜鸟一枚,如有错误,欢迎指出。

QT是一种跨平台的图形用户界面(GUI)开发框架,可以用于开发各种桌面应用程序。要在QT中绘制地图标点,我们可以使用QT提供的绘图工具和地图数据。 首先,我们需要获取地图数据。可以通过在线地图服务(如Google Maps)的API获取地图瓦片数据,或者使用静态地图图片。获取地图数据后,我们可以将其加载到QT应用程序中。 接下来,我们可以使用QT的绘图工具来绘制地图。可以使用QPainter类来创建一个绘图设备,并在其上绘制地图。我们可以根据地图数据的大小和比例尺来确定绘图区域的大小,然后使用QPainter的绘制函数绘制地图。 在地图标点可以使用QT提供的标记机制来实现。可以创建一个自定义的标记类,继承自QWidget或QGraphicsItem,并在其上绘制标记的图标。然后,将标记添加到绘图设备中的适当位置,即可在地图上显示出标点。 为了使用户能够交互地在地图标点,我们可以为绘图设备添加鼠标事件的监听器,例如在鼠标点击事件中获取鼠标点击的坐标,并在该位置添加一个标记。用户还可以拖动标记,以便更改标记的位置。 最后,我们可以在QT应用程序中添加一些控件,例如放大缩小按钮、选择不同的地图视图等,以提供更好的用户体验。 总而言之,使用QT绘制地图标点需要获取地图数据,使用QT的绘图工具和标记机制绘制地图标点,并添加相应的交互性控件。这样,我们就能够在QT应用程序中实现地图的绘制和标点功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值