Russian Qt Forum
Сентябрь 30, 2024, 10:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Соединение виджетов  (Прочитано 3344 раз)
block
Гость
« : Апрель 03, 2013, 11:26 »

Всем привет)
Как можно соединить два виджета с помощью линии? Виджеты например это textEdit.
Запустили программу, показаны два виджета. Потом нажали на кнопку "Добавить линию" добавилась линия.
Думаю соединение сделать через чекбокс или просто наведением.
1) Если через наведение. Т.е. если навели с первого блока на второй, то два виджета соединились.
2) Если через чекбокс сделать. Если выделили два виджета, и нажали на кнопку "Добавить линию" , то виджеты соединились.
Потом двинули первый виджет, второй стоит на месте, и соединение прорисовывется.
Подскажите пожалуйста.)

Вот пример, соединение подобие этого хочу сделать,
http://doc.crossplatform.ru/qt/4.3.5/graphicsview-diagramscene.html,
только она через diagramsacene реализована.
« Последнее редактирование: Апрель 03, 2013, 11:39 от block » Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Апрель 03, 2013, 11:59 »

ну в целом все понятно, вам нужно на сцене разместить 2 GraphicsProxyItem, в них передаете указатели на нужные вам виджеты, размещаете где нужно, и добавляется QGraphicsLine или как то так, не помню, один конец в центр первого виджета, второй конец в центр второго, линию установить ниже всех через ZValue.
Если без сцены, тут уже сложнее, так как нужно будет переделать paintEvent формы, на которой ваши виджеты лежат, в целом как то так:
void paintEvent(painter)
{
  parentClass::paintEvent(painter) рисуются виджеты
  painter->drawLine(firstTextWidget.geometry().center(),secondTextWidget.geometry().center());
}
А также, если вы их тягаете по форме, нужно прорисовыать и линию в новых позициях.
Если я понял верно что вы хотели сделать именно так.
Записан
block
Гость
« Ответ #2 : Апрель 04, 2013, 11:50 »

Буду использовать QGraphicsProxyWidget с связкой QGraphicsScene, QGraphicsView.
Вот пример создания виджетов, один виджет просто через рисование сделан, другой через QTextEdit.
А теперь как сделать движение виджета QTextEdit. Хотелось бы движение при удержании левой кнопки мыши, в области QTextEdit.
Функция ItemIsMovable работает только с GraphicsItem.
Получается придется делать через событие mousePressed?



Код:
#include <QtGui>

int main(int argc, char *argv[])

{
    QApplication a(argc, argv);
    QGraphicsScene scene(QRectF(-100, -100, 300, 300));
    QGraphicsView view(&scene);
    QGraphicsRectItem* rectItem = new QGraphicsRectItem(0, &scene);
    rectItem->setPen(QPen(Qt::black));
    rectItem->setBrush(QBrush(Qt::green));
    rectItem->setRect(QRectF(-30, -30, 120, 80));
    rectItem->setFlags(QGraphicsItem::ItemIsMovable);
    QTextEdit* text = new QTextEdit();
    text->setFixedSize(100,30);
    text->setGeometry(-40,-70,100,30);
    QGraphicsProxyWidget* widgetItem = scene.addWidget(text);

    //widgetItem->setFlags(QGraphicsItem::ItemIsMovable); //вот так не работает..
    view.show();
    return a.exec();

}
« Последнее редактирование: Апрель 04, 2013, 12:11 от block » Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #3 : Апрель 09, 2013, 07:48 »

поищи тему, я когда то реализовал класс, который позволяет таскать по сцене обычные виджеты и менять их размеры
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.133 секунд. Запросов: 23.