Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
1

Двигать точку слайдерами

25.03.2017, 11:14. Показов 1576. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кто может сделать мелкий проект со всеми фаилами .h .pro .cpp?
Двумя слайдерами двигать точку на экране по X,Y.

В примере “examples\widgets\sliders” просто хардкор…
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2017, 11:14
Ответы с готовыми решениями:

Как двигать Label в Дизайнере
Разместил объект Label (из меню Display Widgets) с надписью "0 todo/0 done" в окне с помощью...

Нарисовать, двигать, сохранить линию Qt 4.8.4
Можете сделать простой пример до максимально пункта какого не жалко? 1)создать массив...

Как двигать progressBar из другого потока?
когда вызываю LP_WI->ui.progressBar->setValue((i * 100)/ to); из потока, то вылетает ошибка,...

Как двигать точку на графике excel?
у МЕНЯ EXCEL 2007. имеется точечный график на котором есть точка ссылающаяся на две ячейки. мне...

18
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
25.03.2017, 12:08 2
Excalibur921, на qml это делается в три строчки
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
25.03.2017, 13:19  [ТС] 3
Я не знаю что такое qml…
Можете набросать пример qt?

Добавлено через 1 час 0 минут
Qt 4.8 C++
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
25.03.2017, 16:00 4
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Qt 4.8 C++
В с++ это тоже относительно просто.
Создаёте проект на основе QMainWindow с формой(ui).
Открываете форму, размещаете на ней два QSlider с именами sliderX и sliderY. Размещаете необходимый виджет, выполняющий роль точки(с именем point).
В .h у MainWindow пишите:
C++ (Qt)
1
2
3
4
5
6
7
class MainWindow : public QMainWindow
{
...
slots: 
    void updatePointPos();
...
}
Делаете слот updatePointPos:
C++ (Qt)
1
2
3
4
void MainWindow::updatePointPos()
{
   ui->point->move(ui->sliderX->value(), ui->sliderY->value());
}
затем в конструкторе MainWindow пишите соединения:
C++ (Qt)
1
2
3
4
5
6
7
8
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->sliderX, SIGNAL(valueChanged(int)), this, SLOT(updatePointPos()));
    connect(ui->sliderY, SIGNAL(valueChanged(int)), this, SLOT(updatePointPos()));
}
1
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
25.03.2017, 17:23  [ТС] 5
Нет у меня нет тот уровень.
А где Qgui…
Цитата Сообщение от Excalibur921 Посмотреть сообщение
сделать мелкий проект со всеми фаилами .h .pro .cpp
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
26.03.2017, 11:06 6
Qml можно так
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
import QtQuick 2.5
import QtQuick.Controls 1.4
Item{
    width:500
    height: 500
    Column{
        Label {
            text: "."
            x: slx.value
            y: sly.value
        }
        Slider{
            id: slx
            maximumValue: 100
            stepSize: 1
        }
        Slider{
            id: sly
            maximumValue: 100
            stepSize: 1
        }
    }
}
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
26.03.2017, 18:16  [ТС] 7
Peoples, Так что Qt ерунда нужно изучать QtQuick или QML?
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
26.03.2017, 20:38  [ТС] 8
Непашет…

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
mainwindow.h
#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();
    
private:
    Ui::MainWindow *ui;
slots:
 void updatePointPos();        //<=========== eror
};
 
#endif // MAINWINDOW_H
main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include <QApplication>
#include "mainwindow.h"
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();
}

mainwindow.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->sliderX, SIGNAL(valueChanged(int)), this, SLOT(updatePointPos()));
    connect(ui->sliderY, SIGNAL(valueChanged(int)), this, SLOT(updatePointPos()));
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::updatePointPos()
{
   ui->point->move(ui->sliderX->value(), ui->sliderY->value());
}
Двигать точку слайдерами
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
27.03.2017, 00:14  [ТС] 9
Исправил, но зависает если отпустить слайдер
Нужно написать
public slots:

Добавлено через 3 часа 13 минут
Соединил Horizontal slider и Spin Box чисто в Design перетаскиванием.
Так теперь в ui_mainwindow.h почему то появились слоты теперь только тут…+каша из неведомого кода…
Ох и бардак этот Qt…
Почему нельзя было сделать один и тотже строгий порядок задания и расположения соединений…

А если проект с вашим кодом и 2 слайдерами собирается без ошибок то почему зависает приложение то на одном слайдере то на другом?
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
27.03.2017, 09:37  [ТС] 10
Вот весь проект.
Почему зависает?
1.zip
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
27.03.2017, 12:09 11
Excalibur921, не стоит ставить layout, когда управляешь положением элемента через x и y.
Также нет ничего удивительного в том, что Slider перестаёт работать, если он загораживается каким-то другим элементом(к примеру, Label). Элементы, созданные после, по умолчанию загораживают более старые элементы. Либо делайте так, чтобы элементы не пересекались, либо выставляйте им нужный уровень по z. В дизайнере это можно делать с помощью пунктов "вперёд" и "назад" контекстного меню элемента.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Ох и бардак этот Qt…
Ещё какой... Особенно для тех людей, которые пренебрежительно относятся к документации. Впрочем с такой позиции любая большая библиотека для стороннего человека - бардак.
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
27.03.2017, 12:39  [ТС] 12
Изначально Label вообще не мешал слайдерам. Спецом сделал его далеко. Помогло убрать “Break Layout” а был “Lay out in a Grid” теперь пашет. Не знаю где эти Z настройки. А причина зависания значит был чисто баг Qt.
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
27.03.2017, 15:12 13
Excalibur921, тут такое дело: либо применяется менеджер компоновки(layout), либо вы управляете геометрией виджетов самостоятельно. В противном случае возможна некорректная работа. Это относится не только к Qt, а вообще к любому другому менеджеру UI.
Программа у вас тут не зависала(меню и прочие вещи вполне себе работали), некорректно работала лишь передача событий ввода к Slider из-за сломанного вами layout.
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
27.03.2017, 17:33  [ТС] 14
Wyn,Можете набросать как сделать такую прогу? =)

2 слайдера управляют параметрами a0 a1
бинарный массив Array0 размером 300 на 300

читаем параметры a0 a1
делаем 100 итераций и рисуем горизонтальный отрезок в Array0
растеризуем массив Array0 в картинку

Суть проги: попиксельно рисуем горизонтальный отрезок, началом координат отрезка управляют слайдеры.

Есть прога которая примерно это делает готовая . Но в ней так много фаилов… черт ногу сломит.
Mutex взяли…он тут не нужен.
Двигать точку слайдерами
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
27.03.2017, 18:32 15
Цитата Сообщение от Excalibur921 Посмотреть сообщение
попиксельно рисуем горизонтальный отрезок, началом координат отрезка управляют слайдеры.
Началом координат относительно чего? Я так понимаю рисунок вначале генерируется куда-нибудь в QImage, а уже потом отображается. Если начало координат в этом рисунке - то позиционирование чего либо в нём это исключительно проблемы алгоритма, который его рисует.
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
27.03.2017, 19:54  [ТС] 16
Цитата Сообщение от Wyn Посмотреть сообщение
Началом координат относительно чего?
Относительно центра массива\картинки.
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
28.03.2017, 12:55 17
Excalibur921, но тогда проблема позиционирования - это проблема алгоритма, который рисует картинку, разве нет? Чего вы от нас-то хотите?
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
28.03.2017, 13:05  [ТС] 18
Хотелось бы сделать прогу чтобы рисовала странные аттракторы как здесь
http://nathanselikoff.com/trai... and-opengl
Только+окрас картой градиента.

Найден был проект на Qt 4 где 4 слайдера управляют параметрами в уравнении.
QStrange-master.zip
Но понять его…100500 фаилов+ спагетти в коде..
И все эти 10 фаилов чтобы точками рисовать…рендер жуткий…белые точки. Просто бинарный массив.
А нужен как по ссылке выше со сглаживанием+окрас карта градиента.
Как не мучаю это QT так и остается он black box непонятно…
Примеры в справке просто швах…как троллинг новичка а не примеры. А ведь они и назывались Trolltech неспроста. Такое чувство что их не для обучения делали а для поиздеваться.

Книги тоже не лучше, сначала hello world, потом кнопка, потом внезапно в бланшет ударила молния и код на 100500 файлов… и так все 3 разных книги толку ноль =).
Сначала выносит мозг ненужным написанием кода вручную потом говорит все это бред юзайте Designer...

Уже склоняюсь к забить на gui на Qt и сделать в glut слайдер это точка на отрезка таскаемая мышкой.
Так и код будет в 100 раз меньше, понятность кода в 100 раз больше
И эти книги учебники по GUI мля по 1000 страниц каждая ппц.

Код на glut всей проги со всеми наворотами дающий красивый рендер будет в 1000 раз меньше одной справки по слайдеру в qt.
И пахать будет в 1000 раз быстрей и читаемость проще.

И вот вишенка на торте…показывают код рисующий 2 слайдера без танцев с бубном…
Опять новая технология qtQuick без вообще единой книги на русском..
И как назло у меня не ставиться выше qt 4.8 вот так на практике кроссплатформенности и не пахнет…
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
28.03.2017, 13:19 19
Excalibur921,
При чём тут виджеты и Qt Quick, если у вас проблемы с рисованием в canvas? Если нужно - рисуйте в opengl, потом выводите изображением с помощью QOpenGLWidget или подобного(в старых версиях - QOGLWidget).
0
28.03.2017, 13:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2017, 13:19
Помогаю со студенческими работами здесь

Двигать точку по прямой с шагом, в момент, когда луч проходит над ней
Есть луч который описывает окружность, и есть точка которая находится в пределах этой окружности....

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

Unity 2D - Как не двигать фон, как двигать объекты по клеткам, как изменить камеру
1. Как уменьшить эту камеру 2. Как запретить нажимать на этот фон? Например, ты тапаешь...

Увеличение временного интервала между слайдерами Owl Carusel
Всем доброго времени суток. Вопрос для тех, кто юзал Owl Carusel. Вопрос заключается в следующем....


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

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