24小时热门版块排行榜    

查看: 598  |  回复: 3

peggycanon

铜虫 (小有名气)

[求助] Qt界面直线 已有1人参与

跪求哪位大侠能帮哈忙,我想通过QT实现画线功能,要求如下:
   点击第一下获取直线第一点,然后直线终点可以跟着鼠标移动,当点击第二下时,直线绘制完成!
  就想autocad绘制直线一样
  非常非常感谢谢!!!
回复此楼
人生苦短追求永恒
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fighter0593

金虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
我想了一下,给你一个思路看看吧.
在UI界面里面拖一个Graphics View,然后在上面绘图,但是貌似里面没有鼠标事件,所以无法获得坐标,需要自己继承Graphics View再写一个鼠标事件来进行绘图. 我写了一个单画直线的例子,你参考一下吧.


//----------dialog.h文件------------------

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QtCore>
#include <QtGui>
#include <QGraphicsScene>
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    Ui:ialog *ui;
    QGraphicsScene *scene;
    QGraphicsLineItem *line;
};

#endif // DIALOG_H


//----------dialog.cpp文件------------------
#include "dialog.h"
#include "ui_dialog.h"

Dialog:ialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui:ialog)
{
    ui->setupUi(this);
    scene=new QGraphicsScene(this);
    ui->graphicsView->setScene (scene);
    QPen blackpen(Qt::black);
    blackpen.setWidth (6);
    line=scene->addLine (0,0,100,100,blackpen);

}

Dialog::~Dialog()
{
    delete ui;
}

//----------main.cpp文件------------------
#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}

另外那个GUI文件就是直接拖了一个Graphics View而已
2楼2014-08-19 02:15:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

peggycanon

铜虫 (小有名气)

送红花一朵
非常感谢!但是能不能不用Graphics View啊?我对他不是很熟,最好直接用MouseEvent实现。
人生苦短追求永恒
3楼2014-08-19 08:07:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fighter0593

金虫 (小有名气)

【答案】应助回帖

这个也很简单,不过现在QPainter只能在paintEvent里面实现,需要更新重新绘图的时候直接调用update就可以了.我写了个小程序,左键单击记录起始点坐标,然后右键单击直接画一条直线连接这两个点.

代码如下,你参考一下吧
//------dialog.h-----------
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPoint>
#include <QWidget>
#include <QMouseEvent>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    QPoint firstpoint;
    QPoint lastpoint;
protected:
    void mousePressEvent(QMouseEvent *event);
    void paintEvent(QPaintEvent *event);

private:
    Ui:ialog *ui;
    void drawLineTo(const QPoint &endPoint);


};

#endif // DIALOG_H


//------------dialog.cpp----------
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include <QPainter>
#include <QLineF>

Dialog:ialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui:ialog)
{
    ui->setupUi(this);

}

void Dialog::mousePressEvent (QMouseEvent *event)
{
    if (event->button () ==Qt::LeftButton)
    {
        this->firstpoint = event->pos();
    }
    else if (event->button () ==Qt::RightButton)
    {
        this->lastpoint = event->pos();
        update ();
    }

}

void Dialog::paintEvent (QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawLine(firstpoint.x (), firstpoint.y (), lastpoint.x (),lastpoint.y ());

}

Dialog::~Dialog()
{
    delete ui;
}

//--------------main.cpp--------------
#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}
4楼2014-08-19 14:15:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 peggycanon 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:34 by XQNyDCa1Tk5n
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 22:26 by XQNyDCa1Tk5n
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:26 by XQNyDCa1Tk5n
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:15 by XQNyDCa1Tk5n
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 22:11 by XQNyDCa1Tk5n
[基金申请] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:06 by XQNyDCa1Tk5n
[教师之家] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:06 by XQNyDCa1Tk5n
[有机交流] OpenAI又攻克数学难题了,离AI做有机合成还有多远? +3 wangyl_123 2026-10-10 6/300 2026-10-11 15:04 by Abin0406
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 14:25 by VOMexwnDzOFZ
[教师之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 (EPI+-1)(金币-50) +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 14:05 by VOMexwnDzOFZ
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:51 by VOMexwnDzOFZ
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:45 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:54 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:34 by VOMexwnDzOFZ
[考博] 招收博士生一名 +3 mandolin 2026-10-10 3/150 2026-10-11 10:21 by 不是山谷!
[教师之家] 课题组会帮你通过考核么? +3 好运来~9527 2026-10-10 5/250 2026-10-11 09:00 by 好运来~9527
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 qR2AdCWTVtkw 2026-10-09 4/200 2026-10-11 03:14 by M0zrYVSAnxpE
[有机交流] 各位大佬,路线设计求助 +6 zapen 2026-10-08 8/400 2026-10-10 15:59 by zapen
[基金申请] 入职后第一次管课题组的专利缴费,对账才发现官费比别人多掏了一倍 +5 13108017953 2026-10-08 5/250 2026-10-10 11:15 by wdwd123
[有机交流] 我应该选哪条合成路线让实验成功率高一些? +5 jing816y 2026-10-08 9/450 2026-10-10 09:05 by zapen
信息提示
请填处理意见