Как сделать так, чтобы графики Qt появлялись в том же окне? - PullRequest
1 голос
/ 17 июня 2011

Я работаю в Qt в моей программе.У меня есть окно виджета, и я поместил в него кнопку и список.Затем я создал класс под названием myplot, для которого выполняется построение графика.Затем в моем обработчике событий кнопки я назвал объект myplot

 myplot * p1 = new myplot(session,session ,24, "session"); // send arrays in argument containing the data to be plot 
    p1->show();
    myplot * p2 = new myplot(payload,payload ,24, "payload"); // send arrays in argument containing the data to be plot 
    p2->show();

Он работает нормально, так как мой график появляется в новом окне, но я хочу, чтобы графики появлялись в моем окне основного виджета.

Затем я удалил строку заголовка окна моих графиков. Я написал этот код Qt:

p1->setWindowFlags(Qt::FramelessWindowHint);
p2->setWindowFlags(Qt::FramelessWindowHint);

Теперь

1) что нужно сделать, чтобы разместить и добавитьокно графиков в моем главном окне?Кроме того, когда я закрываю главное окно, мое окно графика должно закрываться.
2) когда я выбираю другое значение из списка и нажимаю кнопку, мой старый график исчезает, и должно появиться новое

я перетаскиваю verticlalayoutзатем напишите

ui->verticalLayout->addChildWidget(p1);

, но получил ошибку

/ usr / include / qt4 / QtGui / qlayout.h: 191: ошибка: 'void QLayout :: addChildWidget (QWidget *)' isЗащищено

, затем я перетащил скроллрею и написал

myplot * p1 = new myplot(session,session ,24, "session");
p1->setWindowFlags(Qt::FramelessWindowHint);
ui->scrollArea->addScrollBarWidget(p1,0);
p1->show();

мои графики перестали появляться, будь добр, наставь меня, я делаю это неправильно или что правильно

Ответы [ 3 ]

3 голосов
/ 17 июня 2011

Очевидно, myplot является дочерним классом QWidget. Таким образом, вы можете просто определить макет в главном окне (например, используя QHBoxLayout) и добавить в него эти два виджета. Это заставит их быть нарисованными в главном окне. Также убедитесь, что вы передаете главное окно как родительский объект QWidget для графиков.

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

0 голосов
/ 19 января 2015

Обычно вам не нужно беспокоиться об окне, в котором они появляются, оно появляется только потому, что у них нет другого родителя.

Что вам нужно сделать, это указать родительский виджет при его создании.

(Этот ответ основан на предположении, что ваши графики также являются QWidgets, если вы могли бы упомянуть, к какому классу они на самом деле относятся, и, возможно, со ссылкой на документацию, это действительно помогло бы нам ответить вам.)

0 голосов
/ 17 июня 2011

Когда вы вызываете show для виджетов без родителя, он автоматически переносится в окно. Что вы должны сделать, это создать один виджет и добавить графики к его макету. См. QMainWindow примеры и раздел о док-виджетах, если вы этого хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...