Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
1

Самый простой способ рисования

22.01.2014, 20:50. Просмотров 2051. Ответов 14
Метки нет (Все метки)

Здравствуйте. Недавно перешёл на Qt и вот появилась потребность нарисовать обычный прямоугольник без заливки. Начал читать документацию... инфы просто ну очень много: QPainter, QPaintDevice, QPaintEngine, всякие QGraphicsScene, нашёл как реализовать мою задумку через qml. О всём куча текста и примеров. И везде подключается кучка библиотек, пишется несколько функций и т. д., но какой же способ рисования самый простой?
И неужели в Qt нельзя просто одной функцией задать цвет перу, а другой нарисовать прямоугольник?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2014, 20:50
Ответы с готовыми решениями:

Самый удобный способ рисовать
Требуется рисовать элементы постепенно, в ответ на события (нажал кнопку - появился прямоугольник)...

Подскажите самый простой пример TCP клиента и TCP сервера
Подскажите пример самого простого TCP клиента и TCP сервера.

Какой способ рисования самый быстрый?
Вот нашел интересный код рисования на WinApi, переводил с языка С++: procedure...

Самый простой способ воспроизведения музыки
Здравствуйте, хочу создать на сайте раздел с музыкой. Нашел различную инфу напримет...

14
Автор FAQ
2725 / 1421 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
22.01.2014, 20:52 2
самый простой тот который вы понимаете, и я впервые слышу что наличие огромного количества информации по какому-либо вопросу вызывало негодование, вы бы для начала просто определились что вам надо сделать а мы уже средство подскажем, только говорите полное задание....
1
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
22.01.2014, 20:59  [ТС] 3
Чистый, дело в том, что информация эта не всеми частями на русском, а я не хочу что-то упустить в таком, казалось бы, простом вопросе.
Задание так задание... нарисуйте пожалуйста по центру формы прямоугольник без заливки с чёрным контуром, используя в качестве базового класса QMainWindow.
0
Заблокирован
22.01.2014, 21:07 4
Цитата Сообщение от The_Prophet Посмотреть сообщение
И неужели в Qt нельзя просто одной функцией задать цвет перу, а другой нарисовать прямоугольник?
можно. К примеру так (прямоугольник с красным контуром)
C++ (Qt)
1
2
3
4
5
void paintEvent(QPaintEvent* pe){
QPainter painter1(this);
painter1.setPen(QPen(Qt::red));
painter1.drawRect(50,50,40,40);
}
Добавлено через 2 минуты
Цитата Сообщение от The_Prophet Посмотреть сообщение
Чистый, дело в том, что информация эта не всеми частями на русском, а я не хочу что-то упустить в таком, казалось бы, простом вопросе.
"Шлее М. - Qt4.5. Профессиональное программирование на C++", есть на трекерах.
1
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
22.01.2014, 21:56  [ТС] 5
Ev_Hyper, знаете, у меня не работает. Qt 5.1.1
ошибка: C2355: 'this' : can only be referenced inside non-static member functions
Если убрать (this) запускается, но форма пустая.
0
Эксперт C
24139 / 14850 / 3133
Регистрация: 24.12.2010
Сообщений: 31,779
22.01.2014, 22:29 6
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
"Шлее М. - Qt4.5. Профессиональное программирование на C++"
Могу добавить "Бланшет и Саммерфильд Qt.N.N Программирование GUI на С++" Недавно видел в магазине. Цена хорошая, но того стоит
1
Заблокирован
22.01.2014, 22:29 7
У меня Qt 4. - работает.
Покажите весь код, думаю, ошибка не в версии
0
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
22.01.2014, 22:44  [ТС] 8
Ev_Hyper, код точь в точь как вы написали.
Ещё подключил библиотеку QPainter и в файле .h описал функцию.

Начал писать ещё это:
QPainter::setPen: Painter not active
QPainter::drawRects: Painter not active
0
Эксперт C
24139 / 14850 / 3133
Регистрация: 24.12.2010
Сообщений: 31,779
22.01.2014, 22:49 9
C++ (Qt)
1
p.begin();
Добавлено через 2 минуты
Ну и, как говорено, "учиться, учится и учиться!" Книжки читать. Примеры смотреть. Доку, опять же...
1
Заблокирован
22.01.2014, 22:50 10
The_Prophet,
Кликните здесь для просмотра всего текста

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//help2.h
#ifndef HELP2_H
#define HELP2_H
 
#include <QtGui>
#include <QPainter>
#include "ui_help2.h"
 
class Help2 : public QMainWindow
{
    Q_OBJECT
 
public:
    Help2(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~Help2();
private:
    Ui::Help2Class ui;
protected:
void paintEvent(QPaintEvent* pe){
QPainter painter1(this);
painter1.setPen(QPen(Qt::red));
painter1.drawRect(50,50,40,40);
}
};
 
#endif // HELP2_H
//help2.cpp
#include "help2.h"
 
Help2::Help2(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
        ui.setupUi(this);
 
}
 
Help2::~Help2()
{
 
}
//main.cpp
#include "help2.h"
 
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Help2 w;
    w.show();
    return a.exec();
}
1
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
22.01.2014, 23:09  [ТС] 11
Ev_Hyper, да, если писать прямо в классе, то работает. В .cpp файлах просит переменную типа QPaintDevice вместо this. И я пока не знаю, как корректно передать туда форму.
0
Заблокирован
22.01.2014, 23:12 12
The_Prophet, значит вы просто неправильно перенесли в .cpp
Выложите ваш код
0
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
22.01.2014, 23:16  [ТС] 13
Ev_Hyper,
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include "QPainter"
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    void paintEvent(QPaintEvent*);
    ~MainWindow();     
private:
    Ui::MainWindow *ui;
protected:
 
};
 
#endif // MAINWINDOW_H
 
 
#include "mainwindow.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
 
    return a.exec();
}
 
 
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>
 
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void paintEvent(QPaintEvent*){
    QPainter p(this);
    p.setPen(QPen(Qt::red));
    p.drawRect(50,50,40,40);
}
0
Заблокирован
22.01.2014, 23:21 14
The_Prophet, уф, неужели вы не видите разницу?
пробуйте:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include "QPainter"
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
 
    ~MainWindow();     
private:
    Ui::MainWindow *ui;
protected:
void paintEvent(QPaintEvent* pe);
};
 
#endif // MAINWINDOW_H
 
 
#include "mainwindow.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
 
    return a.exec();
}
 
 
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>
 
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::paintEvent(QPaintEvent* pe) {
    QPainter p(this);
    p.setPen(QPen(Qt::red));
    p.drawRect(50,50,40,40);
}
1
8 / 8 / 0
Регистрация: 13.01.2013
Сообщений: 177
22.01.2014, 23:26  [ТС] 15
Ev_Hyper, спасибо) работает. Всё легко объясняется - перехожу с билдера...
C++ (Qt)
1
void MainWindow::paintEvent(QPaintEvent* )
было решающей строчкой
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2014, 23:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Самый простой способ удаления файла
Напишите пожалуйста на VB самый простой способ удаления файла на диске!

Самый простой способ создать таблицу
подскажите пожалуйста как можно сделать таблицу, прошу привести пример, даже самый простой ...

Самый простой способ шифрования файла
как сделать чтоб при открывании файла текстовым редактором вместо понятных слов созданных...

создать стоку из n нулей, самый простой способ
пока придумал &quot;000000000000000000000000000000000&quot;.slice(0, n) з.ы. n = {0, 254}


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.