рисование внутри виджета в Qt - PullRequest
3 голосов
/ 08 сентября 2010

Я создал очень простой графический интерфейс, который имеет кнопку и виджет «Графический вид» из Display Widgets.При нажатии кнопки я хочу, чтобы линия проходила через виджет «Графический вид».Я изменил имя виджета «Графический вид» на gv, щелкнув правой кнопкой мыши виджет в режиме конструктора и выбрав «изменить имя объекта».Я не могу понять, как провести черту.Я читал различные тексты на Qt, которые предоставляли информацию о QPainter, PaintEvent и т. Д. Но я запутался.

Пожалуйста, помогите мне с этим.Небольшой пример кода будет очень полезен для меня, так как я новичок в Qt.

Ответы [ 3 ]

4 голосов
/ 08 сентября 2010

QGraphicsView предназначен для отображения экземпляров QGraphicsItem, которые управляются компонентом QGraphicsScene.В вашем случае вы создадите QGraphicsLineItem и добавите его в сцену или создадите его как элемент сцены, вызвав функцию-член addLine вашего экземпляра QGraphicsScene.

Все рисование будет выполняться самим Qt, при условии, что вы правильно соединили графический вид и сцену.Обязательно прочитайте Каркас графического представления , который дает обзор того, как работают эти компоненты.

Вы найдете примеры кода того, как управлять и отображать сцену с использованием каркаса графического представления.здесь: http://doc.trolltech.com/4.6/examples-graphicsview.html

3 голосов
/ 08 сентября 2010

Вы можете рисовать в QPainter

Либо переопределить событие рисования и нарисовать там

void MyDisplayWidget::paintEvent(QPaintEvent*)
{
    QPainter p(this);   
    p.setPen(Qt::green);

    p.drawText(10,10,"hello");

}

Или нарисовать в QImage и показать, что

QImage image = QImage(size);
QPainter p(&image);
p.drawText(10,10,"hello");
// draw or save QImage 

Вы можетедаже используйте ту же функцию рисования, используя QPainter * для рисования либо непосредственно на экране, либо на изображении.

0 голосов
/ 22 января 2017

сначала вы должны знать некоторую информацию о QPainter, чтобы воспользоваться ею.

QPainter предоставляет высоко оптимизированные функции для выполнения большинства программ графического интерфейса пользователя. Он может рисовать все от простых графических примитивов (представленных классами QPoint, QLine, QRect, QRegion и QPolygon) до сложных фигур, таких как векторные контуры. И мы используем его для рисования на устройствах рисования затем визуализируем его для просмотра, и у нас есть множество устройств qpaint, таких как: QWidget, QImage, QPixmap, QPicture, QPrinter и QOpenGLPaintDevice. Вы можете использовать любое из них в зависимости от ваших требований, затем создать сцену QGraphic и добавить устройство рисования в качестве сцены qgraphic. элемент для отображения в графическом представлении.

вот простой код:

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    scene=new QGraphicsScene(this); //allocate your scene to your main widget
    view=new QGraphicsView(scene,this);//here is your view
    pixmap=new QPixmap(QSize(700,700));// paint device
    view->resize(700,700);

}

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

void Widget::paintEvent(QPaintEvent *e)
{
    painter=new QPainter;// create your painter
    painter->begin(pixmap);//add painter to your paint device

    painter->fillRect(0,0,300,300,Qt::red);//draw rect
    painter->setPen(Qt::yellow);
    painter->drawLine(0,0,700,700);//draw line
    painter->end();
    scene->addPixmap(*pixmap);// add your paint device to your scene
    view->show();//then show your view

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...