Qt: update - добавить объекты пользовательского интерфейса в существующее окно во время выполнения - PullRequest
1 голос
/ 08 июня 2011

Можно ли добавить объекты пользовательского интерфейса (кнопки, текстовые поля и т. Д.) В видимое окно qt, т.е. у меня есть окно, в котором есть QTextEdit, где пользователь может добавить число, а затем есть кнопка для добавления другого QTetEdit длядругой номер и кнопка, чтобы удалить его.Это означает, что я могу добавить произвольное количество полей, а позже я могу выполнить какое-то вычисление для всех элементов, потому что мне нужно иметь возможность добавлять произвольное количество дополнительных объектов, поэтому показ и скрытие элементов, вероятно, будет неэффективным,Это вымышленный пример, но он демонстрирует цель того, что мне нужно.

Кто-нибудь делал что-нибудь подобное?

- обновление -

Вот какой-то кодЯ пытаюсь, что это не работает для меня, окно уже видно, когда код выполняется:

void MainWindow::addArgument()
{
    QPushButton button;
    ui->addArgRowHorizontalLayout->addWidget(&button);
    button.show();
    this->show();
}

кто-нибудь знает, что я делаю не так, все автоматически завершается в qtcreator и компилируется без ошибок, поэтому я не знаю, гдеидти дальше.

j

Ответы [ 5 ]

8 голосов
/ 09 июня 2011

Я ссылаюсь на содержание обновления.Вы перешли на C ++ из C # / Java?

QPushButton button;

Эта инструкция создает объект QPushButton в stack , а объекты в стеке уничтожаются, когда заканчивается их область действия, которая в данном случае является функциейзакрывающая скобкаЧтобы сделать объект постоянным, вы должны разместить его на heap :

QPushButton* button = new QPushButton();

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

Как правило, в C ++ вам нужно вручную удалять объекты из кучи, когда логике вашего приложения они больше не нужны.К счастью, Qt отслеживает QObject, поэтому вам редко приходится распоряжаться ими самостоятельно.Хорошее место для запуска C ++ - C ++ FAQ .Кроме того, вам следует ознакомиться с руководством по Qt, его действительно легко прочитать и понять концепции Qt.

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

Мне удалось динамически добавить виджеты в главное окно, например:

MainWindow :: addWidget () - это слот MainWindow

void MainWindow::addWidget()
{
    QPushButton* button = new QPushButton;
    ui->HorizontalLayout->addWidget(button);
    button->show();
}

Просто когда знаешь как:)

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

Нет ничего таинственного в том, как Qt создает свои объекты пользовательского интерфейса: Qt Designer генерирует исходный код C ++, который вы можете просмотреть. Если имя вашей формы MyForm.ui, то вы должны найти файл ui_MyForm.h в каталоге сборки; функция setupUi в этом файле показывает, как пользовательский интерфейс создается с нуля.

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

Проверить этот пост . Я сделал нечто похожее на это в одном из моих предыдущих проектов, и это сработало как шарм.

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

Да, это возможно.Ничто не мешает вам динамически добавлять или удалять виджеты из макетов динамически.

Возможно, вы захотите взглянуть на функции adjustSize(), которые вам, вероятно, придется вызывать, если ваш контейнер (s) необходимо изменить размер после изменения макета.

Просто попробуйте.

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