Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
4 / 2 / 1
Регистрация: 15.10.2013
Сообщений: 94
1

Рисование на QWidget

28.03.2015, 20:32. Показов 3696. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не совсем шарю в QT. Есть QMainWindow, на нем есть QWidget. Пишу программу, видимо, не то что-то сделал, даже не заметил что, и стало рисоваться не на QWidget, как раньше, а на QMainWindow. Как перейти к рисованию на виджете обратно, спасибо

main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include "mainwindow.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
 
    return a.exec();
}
mainwindow.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <iostream>
#include <QMainWindow>
#include <QPainter>
#include <QTimer>
#include "doska.h"
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    void paintEvent(QPaintEvent *);
    ~MainWindow();
public slots:
    void update();
private slots:
.........
private:
    Ui::MainWindow *ui;
    Doska doska;
};
 
#endif // MAINWINDOW_H
mainwidow.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QTimer *timer=new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(update()));
}
 
void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    QPen pen;
    pen.setColor(Qt::lightGray);
    p.setPen(pen);
    doska.draw(p);
    p.drawLine(0,0,100,500);//рисует эту линию на QMainwindow,а не на QWIdget
    p.drawRect(0,0,100,100);
}
 
void MainWindow:: update()
{
   repaint();
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
Добавлено через 10 часов 58 минут
Сам разобрался.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2015, 20:32
Ответы с готовыми решениями:

рисование в QWidget
Доброго времени суток, я начал учить QT, пользуюсь netbeans и Qtdesigner так что всё обращение к...

Про QWidget и рисование на нём QPainter
В общем такие дела: Заранее просьба не ругать, с Qt работаю практически впервые, поэтому буду...

Как связать QWidget* w = new QWidget(this) с файлом формы UI ?
Ну вопрос в сабже. Создал простую форму без класса. В коде применяется QGraphicsProxyWidget, у...

Создание QWidget внутри QWidget
Есть окно QWidget, в котором есть кнопка. При нажатии на кнопку вызывается метод, который создает...

3
23 / 13 / 5
Регистрация: 07.08.2012
Сообщений: 109
28.03.2015, 22:22 2
"Делайте классы такими чтобы неправильно их использовать было тяжело, и наоборот правильно - легко" потом просто не справишься со сложностью которую сам себе ...
если я не ошибаюсь вам бы больше подошло рисовать в QWidget'e а потом если всё же всё ещё нужен QMainWindow использовать метод QMainWindow::setTarget(QWidget*) или как он там? в общем документация раскурит
0
59 / 46 / 11
Регистрация: 16.09.2014
Сообщений: 124
29.03.2015, 04:44 3
Цитата Сообщение от handkock Посмотреть сообщение
Не совсем шарю в QT.
Вы не шарите в С++, а это основа QT. Без этих знаний вы не напишите адекватную программу.
Так, что вперед учить С++ или бросьте эту затею, говно-софта и так хватает.

Вы переопределили метод paintEvent класса QMainWindow и рисуете в нем, почему вы ожидаете, что рисование будет происходить в другом месте (классе)? Переопределите метод того класса где хотите рисовать, в вашем случае QWidget.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.03.2015, 13:04 4
Цитата Сообщение от handkock Посмотреть сообщение
Не совсем шарю в QT. Есть QMainWindow, на нем есть QWidget. Пишу программу, видимо, не то что-то сделал, даже не заметил что, и стало рисоваться не на QWidget, как раньше, а на QMainWindow. Как перейти к рисованию на виджете обратно, спасибо
Рисовать отдельно на каждом виджите.
Для каждого вижета переопределить paintEvent или нацепить фильтр событий.
0
29.03.2015, 13:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2015, 13:04
Помогаю со студенческими работами здесь

Как открыть QWidget из QWidget по нажатию кнопки
Здравствуйте! Подскажите как открыть по нажатию QPushButton еще один QWidget в нижеприведенном...

QCursor и QWidget
Добрый день такая проблема. Есть виджет, например centralWidget. Надо получить координаты мыши...

QWidget и фон
Йо! Начал изучать Qt по книжке Шлее, которая после книги Сиддхарта Рао кажется мне более чем...

Zoom в qwidget
Привет всем возникла проблемка. У меня есть QWidget, где я вывожу картинку. Хочу сделать zoom. Пока...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru