0
点赞
收藏
分享

微信扫一扫

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

忆北文学摄影爱好员 2022-02-12 阅读 33

1.项目说明

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

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

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

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

2.实现

1.在ui界面添加控件

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菜鸟一枚,如有错误,欢迎指出。

举报

相关推荐

0 条评论