2010-09-08 4 views
3

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

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

ответ

3

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

Либо переопределить paintevent и рисовать там

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 * для рисования либо непосредственно на экран, либо на изображение.

+1

Я создал виджет MyDisplayWidget. Но я разработал форму mainwindow.ui, используя средство перетаскивания с использованием Qt. Как включить этот новый виджет в этот gui? – nishant

+1

Существует много способов кодирования, чтобы использовать пользовательские виджеты в дизайнерском приложении Qt. Если вы хотите использовать свой собственный виджет в своем главном окне, используйте приложение-конструктор, чтобы поместить виджет владельца места (или фрейм), а затем в код для вашего главного окна, создать экземпляр вашего пользовательского виджета и добавить его к владельцу места , –

+0

@ nishant-4545: продвинутые виджеты - это быстрый способ выполнить задание. См. Http://doc.trolltech.com/4.6/designer-using-custom-widgets.html –

4

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

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

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

-1

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

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

здесь просто код:

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 

} 
Смежные вопросы