Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
1

Фигуры Лиссажу

18.05.2016, 19:40. Просмотров 602. Ответов 21
Метки нет (Все метки)

Добрый день, подскажите пожалуйста как правильно сформировать массив для Фигуры Лиссажу?
я пытаюсь сделать чтобы фигура отрисовывалась динамически (в планах) как на осцилографе при изменении параметров менялась фигура.
Но пока я просто даже что-то простейшее не могу получить. я рисую через QCustomPlot и нашел такой пример который рисуем график y=x*x, но при попытаках заменить на что-то похожее на уравнения для построения лиссажу выходит дичь(
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
    //Сгенерируем данные
    //Для этого создадим два массива точек:
    //один для сохранения x координат точек,
    //а второй для y соответственно
 
    double a = -1; //Начало интервала, где рисуем график по оси Ox
    double b =  1; //Конец интервала, где рисуем график по оси Ox
    double h = 0.01; //Шаг, с которым будем пробегать по оси Ox
 
    int N=(b-a)/h + 2; //Вычисляем количество точек, которые будем отрисовывать
    QVector<double> x(N), y(N); //Массивы координат точек
 
    //Вычисляем наши данные
    int i=0;
    for (double X=a; X<=b; X+=h)//Пробегаем по всем точкам
    {
        x[i] = X;
        y[i] = X*X;//Формула нашей функции
        i++;
    }
 
    ui->widget->clearGraphs();//Если нужно, но очищаем все графики
    //Добавляем один график в widget
    ui->widget->addGraph();
    //Говорим, что отрисовать нужно график по нашим двум массивам x и y
    ui->widget->graph(0)->setData(x, y);
 
    //Подписываем оси Ox и Oy
    ui->widget->xAxis->setLabel("x");
    ui->widget->yAxis->setLabel("y");
 
    //Установим область, которая будет показываться на графике
    ui->widget->xAxis->setRange(a, b);//Для оси Ox
 
    //Для показа границ по оси Oy сложнее, так как надо по правильному
    //вычислить минимальное и максимальное значение в векторах
    double minY = y[0], maxY = y[0];
    for (int i=1; i<N; i++)
    {
        if (y[i]<minY) minY = y[i];
        if (y[i]>maxY) maxY = y[i];
    }
    ui->widget->yAxis->setRange(minY, maxY);//Для оси Oy
 
    //И перерисуем график на нашем widget
    ui->widget->replot();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2016, 19:40
Ответы с готовыми решениями:

Перемещение фигуры
Добрый день! Помогите пожалуйста,в Qt совсем новичок. Есть код ,в котором...

Перемещение фигуры
Есть многоугольники на сцене, затем пользователь выбирает многоугольник и...

Поворот 2D фигуры
Добрый день форумчане нужен срочно сделать поворот 2D фигуры в данном случае...

Прорисовка фигуры
при указании координат нужно проверить расположение введенной точки не попала...

Не обновляется координата фигуры
Добрые день. Есть программа на основе QDialog двигающая фигуру по...

21
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
19.05.2016, 22:31  [ТС] 2
получилось что-то подобное, но теперь не получается сделать так чтобы с какой то передичностью по нажатию кнопки изменялся параметр например Е. и по той же кнопке останавливался.
Кликните здесь для просмотра всего текста
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
int a=23;
int b=4;
int c=3;
int d=7;
int e=50,eee=1;
int a2=23,b2=4,c2=18,d2=2,e2=84;
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
   update();
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
 
void MainWindow::update()
{
    int i;
 
    QCPCurve *deltoidRadial = new QCPCurve(ui->customPlot->xAxis, ui->customPlot->yAxis);
    QCPCurve *deltoidRadial2 = new QCPCurve(ui->customPlot2->xAxis, ui->customPlot2->yAxis);
    QCPCurve *deltoidRadial3 = new QCPCurve(ui->customPlot3->xAxis, ui->customPlot3->yAxis);
    QCPCurve *deltoidRadial4 = new QCPCurve(ui->customPlot3->xAxis, ui->customPlot3->yAxis);
    //очищение
    ui->customPlot->clearPlottables();
    ui->customPlot2->clearPlottables();
    ui->customPlot3->clearPlottables();
    // добавление на виджет
    ui->customPlot->addPlottable(deltoidRadial);
    ui->customPlot2->addPlottable(deltoidRadial2);
    ui->customPlot3->addPlottable(deltoidRadial3);
    ui->customPlot3->addPlottable(deltoidRadial4);
 
     // Включаем взаимодействие удаления/приближения
    // Включаем взаимодействие перетаскивания графика
     ui->customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
     ui->customPlot2->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
     ui->customPlot3->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
 
    //количество точек
    int pointCount = 5000;
    // создание массива данных
    QVector<double> x1(pointCount), y1(pointCount);
    QVector<double> x2(pointCount), y2(pointCount);
 
 
    for (i=0; i<pointCount; ++i)
    {
      double t = i/(double)(pointCount-1)*2*M_PI;
      x1[i] = a*sin(c*t+e);
      y1[i] = b*sin(d*t);
      x2[i] = a2*sin(c2*t+e2);
      y2[i] = b2*sin(d2*t);
    }
 
 
    //построение по массивам
    deltoidRadial->setData(x1, y1);
    deltoidRadial2->setData(x2, y2);
    deltoidRadial3->setData(x1, y1);
    deltoidRadial4->setData(x2, y2);
    // цвет графика:
    deltoidRadial->setPen(QPen(QColor(240, 0, 0)));
    deltoidRadial2->setPen(QPen(QColor(0, 0, 240)));
    deltoidRadial3->setPen(QPen(QColor(240, 0, 0)));
    deltoidRadial4->setPen(QPen(QColor(0, 0, 240)));
    // set some basic customPlot config:
 
 
    ui->customPlot->axisRect()->setupFullAxesBox();
    ui->customPlot->rescaleAxes();
    ui->customPlot->replot();
 
    ui->customPlot2->axisRect()->setupFullAxesBox();
    ui->customPlot2->rescaleAxes();
    ui->customPlot2->replot();
 
    ui->customPlot3->axisRect()->setupFullAxesBox();
    ui->customPlot3->rescaleAxes();
    ui->customPlot3->replot();
 
}
void MainWindow::update2()
{
    while(e2!=200)
    {
        e2++;
         //ui->label_21->e2;
         ui->label_21->setText("ssss");
        //update();
        Sleep(500);
    }
}
 
 
void MainWindow::on_horizontalSlider_5_sliderReleased()
{
    e=ui->horizontalSlider_5->value();
    update();
}
 
void MainWindow::on_horizontalSlider_4_sliderReleased()
{
    d=ui->horizontalSlider_4->value();
    update();
}
 
void MainWindow::on_horizontalSlider_3_sliderReleased()
{
    c=ui->horizontalSlider_3->value();
    update();
}
 
void MainWindow::on_horizontalSlider_2_sliderReleased()
{
    b=ui->horizontalSlider_2->value();
    update();
}
 
void MainWindow::on_horizontalSlider_sliderReleased()
{
    a=ui->horizontalSlider->value();
    update();
}
 
void MainWindow::on_horizontalSlider_6_sliderReleased()
{
    a2=ui->horizontalSlider_6->value();
    update();
}
 
void MainWindow::on_horizontalSlider_7_sliderReleased()
{
    b2=ui->horizontalSlider_7->value();
    update();
}
 
void MainWindow::on_horizontalSlider_8_sliderReleased()
{
    c2=ui->horizontalSlider_8->value();
    update();
}
 
void MainWindow::on_horizontalSlider_9_sliderReleased()
{
    d2=ui->horizontalSlider_9->value();
    update();
}
 
void MainWindow::on_horizontalSlider_10_sliderReleased()
{
    e2=ui->horizontalSlider_10->value();
    update();
}
 
void MainWindow::on_exit_clicked()
{
    eee=1;
    while(eee)
    {
       // c2++;
        e--;
        e2++;
         //ui->label_21->e2;
         ui->label_19->setNum(e2);
         ui->label_9->setNum(e);
        update();
        Sleep(100);
        if(e==0)
            e=200;
        if(e2==220)
            e2=0;
        if(eee==100)
            e=0;
    }
}
 
void MainWindow::on_pushButton_clicked()
{
    eee=0;
}
0
Миниатюры
Фигуры Лиссажу   Фигуры Лиссажу  
mevn
136 / 103 / 23
Регистрация: 06.10.2008
Сообщений: 451
20.05.2016, 07:34 3
А где connect?
Или программа сама должна догадаться что нужно делать при нажатии кнопки?
0
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
20.05.2016, 09:09  [ТС] 4
так как я пока не дружу с коннектом я попытался сделать кустарным способом через клик и вызов функции но теперь кроме этой функции ничего не меняется и виснет при закрытии или изменении )
0
mevn
136 / 103 / 23
Регистрация: 06.10.2008
Сообщений: 451
20.05.2016, 09:31 5
Можно посмотреть здесь.
Сигналы - слоты
1
icpu
476 / 357 / 91
Регистрация: 10.03.2011
Сообщений: 1,504
Записей в блоге: 4
20.05.2016, 09:36 6
Цитата Сообщение от mevn Посмотреть сообщение
А где connect?
Или программа сама должна догадаться что нужно делать при нажатии кнопки?
Автоматическое подключение по имени функций. Всё в норме.

kyzavr, on_exit_clicked забивает очередь сообщений. У вас два варианта
http://doc.qt.io/qt-5/qcoreapplication.html#processEvents
или повесить на кнопку флаг, который будете проверять внутри update. Можно даже просто включить у неё toggled
1
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
20.05.2016, 09:51  [ТС] 7
что-то типа так? но она тупо перестала пахать теперь
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void MainWindow::on_exit_toggled(bool checked)
{
    eee=1;
    while(eee)
    {
 
        e+=0.1;
        e2+=0.1;
        update();
        Sleep(140);
        if(e==0)
            e=200;
        if(e2==220)
            e2=0;
        if(eee==100)
            e=0;
        ui->label_21->setNum(checked);
        if (checked)
            eee=0;
    }
}
0
icpu
476 / 357 / 91
Регистрация: 10.03.2011
Сообщений: 1,504
Записей в блоге: 4
20.05.2016, 09:57 8
=_=
kyzavr,
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
bool makeEeeWeee = false;
 
void MainWindow::on_exit_toggled(bool checked)
{
makeEeeWeee = checked;
}
 
void MainWindow::update()
{
/* ... */ 
if (makeEeeWeee) {
    eee=1;
    while(eee)
    {
 
        e+=0.1;
        e2+=0.1;
        update();
        Sleep(140);
        if(e==0)
            e=200;
        if(e2==220)
            e2=0;
        if(eee==100)
            e=0;
        ui->label_21->setNum(checked);
        if (checked)
            eee=0;
    }
}
}
Вообще вам нужно решительно познакомиться со слотами и таймерами, и переписать весь этот не тихий ужас, но пока и так сойдёт.
1
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
20.05.2016, 10:16  [ТС] 9
icpu, спасибо но это все равно не заработало) видимо реально нужно через слоты и таймеры учится )
0
icpu
476 / 357 / 91
Регистрация: 10.03.2011
Сообщений: 1,504
Записей в блоге: 4
20.05.2016, 11:19 10
kyzavr, естественно не заработало, я в вашем кадавре разобраться даже не пытался.

Сделайте
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
public slots:
void onTimer(){
    if(eee)
    {
        e+=0.1;
        e2+=0.1;
        update();
        if(e==0)
            e=200;
        if(e2==220)
            e2=0;
        if(eee==100)
            e=0;
    }
    else
        sender()->deleteLater();
}
 
void MainWindow::on_exit_toggled(bool checked)
{
    if (checked) {
        QTimer * timer = new QTimer(this);
        connect(timer,SIGNAL(timeout()),this,SLOT(onTimer()));
        timer->start(140);
    }
    else
        eee=0;
}
0
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
20.05.2016, 11:43  [ТС] 11
icpu, спасиб, сейчас попытаюсь только исправить проблему с пемеменными) так как что у е2 е и еее и другие они были обьявлены как глобальные в 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
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
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
 
public:
    explicit MainWindow(QWidget *parent = 0);
 
    ~MainWindow();
    void update();
    void update2();
 
private slots:
    void on_horizontalSlider_5_sliderReleased();
 
    void on_horizontalSlider_4_sliderReleased();
 
    void on_horizontalSlider_3_sliderReleased();
 
    void on_horizontalSlider_2_sliderReleased();
 
    void on_horizontalSlider_sliderReleased();
 
    void on_horizontalSlider_6_sliderReleased();
 
    void on_horizontalSlider_7_sliderReleased();
 
    void on_horizontalSlider_8_sliderReleased();
 
    void on_horizontalSlider_9_sliderReleased();
 
    void on_horizontalSlider_10_sliderReleased();
 
 public slots:
    void onTimer(){
        if(eee)
        {
            e+=0.1;
            e2+=0.1;
            update();
            if(e==0)
                e=200;
            if(e2==220)
                e2=0;
            if(eee==100)
                e=0;
        }
        else
            sender()->deleteLater();
    }
 
   // void on_exit_clicked();
 
    void on_pushButton_clicked();
    void on_exit_toggled(bool checked);
 
signals:
    void MySignal(QString);
 
 
private:
    Ui::MainWindow *ui;
 
};
 
#endif // MAINWINDOW_H
[CPPQT]
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
int a=23;
int b=4;
int c=18;
int d=2;
double e=50,e2=0;
int a2=23,b2=4,c2=18,d2=2,eee=1;
bool makeEeeWeee = false;

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

update();

}

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


void MainWindow::update()
{
int i;

QCPCurve *deltoidRadial = new QCPCurve(ui->customPlot->xAxis, ui->customPlot->yAxis);
QCPCurve *deltoidRadial2 = new QCPCurve(ui->customPlot2->xAxis, ui->customPlot2->yAxis);
QCPCurve *deltoidRadial3 = new QCPCurve(ui->customPlot3->xAxis, ui->customPlot3->yAxis);
QCPCurve *deltoidRadial4 = new QCPCurve(ui->customPlot3->xAxis, ui->customPlot3->yAxis);
//очищение
ui->customPlot->clearPlottables();
ui->customPlot2->clearPlottables();
ui->customPlot3->clearPlottables();
// добавление на виджет
ui->customPlot->addPlottable(deltoidRadial);
ui->customPlot2->addPlottable(deltoidRadial2);
ui->customPlot3->addPlottable(deltoidRadial3);
ui->customPlot3->addPlottable(deltoidRadial4);

// Включаем взаимодействие удаления/приближения
// Включаем взаимодействие перетаскивания графика
ui->customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
ui->customPlot2->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
ui->customPlot3->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);

//количество точек
int pointCount = 5000;
// создание массива данных
QVector<double> x1(pointCount), y1(pointCount);
QVector<double> x2(pointCount), y2(pointCount);


for (i=0; i<pointCount; ++i)
{
double t = i/(double)(pointCount-1)*2*M_PI;
x1[i] = a*sin(c*t+e);
y1[i] = b*sin(d*t);
x2[i] = a2*sin(c2*t+e2);
y2[i] = b2*sin(d2*t);
}


//построение по массивам
deltoidRadial->setData(x1, y1);
deltoidRadial2->setData(x2, y2);
deltoidRadial3->setData(x1, y1);
deltoidRadial4->setData(x2, y2);
// цвет графика:
deltoidRadial->setPen(QPen(QColor(240, 0, 0)));
deltoidRadial2->setPen(QPen(QColor(0, 0, 240)));
deltoidRadial3->setPen(QPen(QColor(240, 0, 0)));
deltoidRadial4->setPen(QPen(QColor(0, 0, 240)));
// set some basic customPlot config:


ui->customPlot->axisRect()->setupFullAxesBox();
ui->customPlot->rescaleAxes();
ui->customPlot->replot();

ui->customPlot2->axisRect()->setupFullAxesBox();
ui->customPlot2->rescaleAxes();
ui->customPlot2->replot();

ui->customPlot3->axisRect()->setupFullAxesBox();
ui->customPlot3->rescaleAxes();
ui->customPlot3->replot();

}


void MainWindow::on_horizontalSlider_5_sliderReleased()
{
e=ui->horizontalSlider_5->value();
update();
}

void MainWindow::on_horizontalSlider_4_sliderReleased()
{
d=ui->horizontalSlider_4->value();
update();
}

void MainWindow::on_horizontalSlider_3_sliderReleased()
{
c=ui->horizontalSlider_3->value();
update();
}

void MainWindow::on_horizontalSlider_2_sliderReleased()
{
b=ui->horizontalSlider_2->value();
update();
}

void MainWindow::on_horizontalSlider_sliderReleased()
{
a=ui->horizontalSlider->value();
update();
}

void MainWindow::on_horizontalSlider_6_sliderReleased()
{
a2=ui->horizontalSlider_6->value();
update();
}

void MainWindow::on_horizontalSlider_7_sliderReleased()
{
b2=ui->horizontalSlider_7->value();
update();
}

void MainWindow::on_horizontalSlider_8_sliderReleased()
{
c2=ui->horizontalSlider_8->value();
update();
}

void MainWindow::on_horizontalSlider_9_sliderReleased()
{
d2=ui->horizontalSlider_9->value();
update();
}

void MainWindow::on_horizontalSlider_10_sliderReleased()
{
e2=ui->horizontalSlider_10->value();
update();
}


void MainWindow::on_pushButton_clicked()
{


}

void MainWindow::on_exit_toggled(bool checked)
{
if (checked) {
QTimer * timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(onTimer()));
timer->start(140);
}
else
eee=0;
}

[/CPPQT
]


Добавлено через 10 минут
видимо изначально я криво написал и вас это ввело в заблуждения) надо пойти почитать как работают таймеры чтобы вызвать.
0
icpu
476 / 357 / 91
Регистрация: 10.03.2011
Сообщений: 1,504
Записей в блоге: 4
20.05.2016, 13:49 12
перенесите реализацию onTimer в .cpp файл. Правой кнопкой мыши - рефакторинг - перенести...
0
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
20.05.2016, 13:53  [ТС] 13
подскажите пожалуйста еще такую вещь, у меня есть глобальная переменная int а.
я связал слайдер с изменением этой переменной
C++ (Qt)
1
2
 public slots:
   void valueChanged(int);
C++ (Qt)
1
QObject::connect(ui->horizontalSlider, SIGNAL(valueChanged(int)),this, SLOT(valueChanged(int)));
C++ (Qt)
1
2
3
4
5
6
void MainWindow::valueChanged(int x)
{
    a=x;
    update(); // функция новой отрисовки графиков
 
}
и вроде все прекрастно ) но, мне нужно еще таким же макаром связать парочку переменных без создания для них новых функций типа valueChanged(int x), подскажите как сделать её универсальной чтобы через коннект или как то еще передавать туда переменную которую я хочу изменить . ? я подумал что стандартным методом из си, просто передать как параметр функции но почему то qt не жрет это)
0
icpu
476 / 357 / 91
Регистрация: 10.03.2011
Сообщений: 1,504
Записей в блоге: 4
20.05.2016, 14:12 14
kyzavr, QSignalMapper https://habrahabr.ru/post/50812/
Но оно вам не надо.
0
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
20.05.2016, 17:22  [ТС] 15
почему не нужен)? не создавать же мне 10 слотов под каждый коннект )


чет я посмотрел примеры и там примерно тоже самое) передается 1 параметр данных) а как бы что менять не передется(
а мне получается надо сделать что-то подобное
C++ (Qt)
1
2
3
4
QObject::connect(ui->horizontalSlider, SIGNAL(valueChanged(int)),this, SLOT(valueChanged(int)));
QObject::connect(ui->horizontalSlide_2, SIGNAL(valueChanged(int)),this, SLOT(valueChanged(int)));
QObject::connect(ui->horizontalSlider_3, SIGNAL(valueChanged(int)),this, SLOT(valueChanged(int)));
QObject::connect(ui->horizontalSlider_4, SIGNAL(valueChanged(int)),this, SLOT(valueChanged(int)));
где valueChanged(int) понимала бы что для каждого слайдера есть своя переменная
C++ (Qt)
1
2
3
4
5
6
void MainWindow::valueChanged(int x)
{
    переменная=x;
    update();
 
}

кстати не знаю почему но вот это тоже не работает) даже проверку на форму вывел) тупо в эту функцию не заходит
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
void MainWindow::on_pushButton_toggled(bool checked)
{
    ui->label_21->setText("я уточка кря кря");
    if (checked) {
        QTimer * timer = new QTimer(this);
        connect(timer,SIGNAL(timeout()),this,SLOT(onTimer()));
        timer->start(140);
    }
    else
        eee=0;
 
}
0
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
21.05.2016, 21:08  [ТС] 16
никто не знает)?
0
icpu
476 / 357 / 91
Регистрация: 10.03.2011
Сообщений: 1,504
Записей в блоге: 4
22.05.2016, 06:32 17
Из коробки он не может использовать параметры. Проще сделать больше слотов или поставить switch в общем слоте по какому-либо из параметров из sender()

Добавлено через 54 секунды
Ну или унаследоваться от маппера и добавить реализацию под нужные параметры.
0
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
22.05.2016, 20:49  [ТС] 18
Подскажите еще на счет считывания из файла. сделал запись в файл
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
void MainWindow::writeFile()
{
    int pointCount = 5000;
    // создание массива данных
    QVector<double> x1(pointCount), y1(pointCount);
 
    QString fname = "параметры_от_"+QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss") + ".txt";
    QFile file(fname);
 
    if (file.open(QIODevice::WriteOnly | QIODevice::Append))
    {
        QTextStream out(&file);
        for (i=0; i<pointCount; ++i)
        {
 
          double t = i/(double)(pointCount-1)*2*M_PI;
          x1[i] = a*sin(c*t+e);
          y1[i] = b*sin(d*t);
 
        out<<x1[i]<<":"<<y1[i]<<'\n';
 
        }
             file.close();
 
        QMessageBox::information(0, "Message", "Файл: " + fname + " успешно создан");
 
    }
      else QMessageBox::critical(NULL,QObject::tr("Ошибка"),tr("Ошибка создания файла"));
}
и теперь нужно обратно считать его в такой же массив , но что то у меня не получается ) пытался вывести парочку первых строк с помощью -->
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
void MainWindow::readFile()
{
    int pointCount = 10;
 
    QVector<double> x1(pointCount), y1(pointCount);
    QString file_name = QFileDialog::getOpenFileName(this, QString::fromUtf8("Выберете нужный файл")," ");
    QFile file( file_name);
    if(file.open(QIODevice::ReadOnly |QIODevice::Text))
        {
         QMessageBox::information(0, "Message", "Файл:   успешно открыт");
            while(!file.atEnd())
            {
             
                QString str = file.readLine();
                
                QStringList lst = str.split(":");
                 str=lst.at(0);
                ui->label_21->setText(str);
                 str=lst.at(1);
                ui->label_10->setText(str);
                 str=lst.at(2);
                 ui->label_7->setText(str);
                  str=lst.at(3);
                ui->label_8->setText(str);
                 str=lst.at(4);
                ui->label_6->setText(str);
                 str=lst.at(5);
                ui->label_9->setText(str);
                 str=lst.at(6);
 
 
            }
 
        }
        else
        {
           QMessageBox::critical(NULL,QObject::tr("Ошибка"),tr("Ошибка открытия файла"));
        }
 
 
  
}
Но чет не то

Добавлено через 41 минуту
вопрос решен )
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
void MainWindow::readFile()
{
    QString file_name = QFileDialog::getOpenFileName(this, QString::fromUtf8("Выберете нужный файл")," ");
    QFile file( file_name);
    // QTextStream str(&file);
    if(file.open(QIODevice::ReadOnly |QIODevice::Text))
        {
         QMessageBox::information(0, "Message", "Файл:   успешно открыт");
         int i=0;
            while(!file.atEnd())
            {
           
                QString str = file.readLine();
              
                QStringList lst = str.split(":");
               
                xx2[i]=lst.at(0).toDouble();
                yy2[i]=lst.at(1).toDouble();
                 i++;
            }
        }
        else
        {
           QMessageBox::critical(NULL,QObject::tr("Ошибка"),tr("Ошибка открытия файла"));
        }
 
        file.close();
        update();
}
0
kyzavr
2 / 2 / 0
Регистрация: 22.05.2013
Сообщений: 136
29.05.2016, 13:18  [ТС] 19
Подскажите как вызвать форму которую создал в дизайнере? нашел способ на форуме
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MainWindow : public QMainWindow
{
// тут много всего нагенерил Qt Creator
.......
private:
dialog *f2;
.....
};
 
void MainWindow::on_pushButton_2_clicked()
{
    f2 = new dialog(this);
    this->hide();
    f2->show();
}
но он не пашет( не понимаю как инициализировать эту форму
вот мой класс гл окна

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
 
public:
    explicit MainWindow(QWidget *parent = 0);
 
    ~MainWindow();
private:
    Ui::MainWindow *ui;
   dialog *f2;
 
 
};
ошибка: 'dialog' does not name a type
dialog *f2;
^
0
0x90h
327 / 293 / 109
Регистрация: 01.10.2015
Сообщений: 888
29.05.2016, 16:43 20
Класс диалога в Qt называется QDialog, а не dialog, как у вас в листинге.
0
29.05.2016, 16:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2016, 16:43

Движение фигуры в окне
Здравствуйте. Проблема заключается в том, что не получается реализовать это,...

Перемещение фигуры qt5
Нужно осуществить перемещение квадрата по сцене с помощью мыши либо...

Qt + OpenGL не выводятся фигуры
Пытаюсь нарисовать простейшие примитивы, но не выходит. Фон устанавливается,...


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

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

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