24小时热门版块排行榜    

查看: 519  |  回复: 3
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

peggycanon

铜虫 (小有名气)

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

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

peggycanon

铜虫 (小有名气)

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

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的回帖

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的回帖
信息提示
请填处理意见