Qt не отображает дочерний виджет - PullRequest
0 голосов
/ 05 марта 2012

Как я могу получить доступ к пользовательским файлам детей класса.Допустим, класс MainWindow имеет два дочерних диалога.Я хочу получить доступ к LINEEDIT диалога, чтобы я мог взять оттуда текст.Точно так же, как я могу получить доступ к файлам пользовательского интерфейса родительского класса в QT.Примечание: я не унаследовал ничего от класса Parent.Я написал следующий код, чтобы отобразить диалоговое окно, но оно не будет отображаться!

void MainWindow::displaydialog()
{
    ItemDialog dialog= new ItemDialog(this);

    dialog->show(); // it is not displaying the dialog
}

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

Вот код itemdialog,

#include "itemdialog.h"
#include "ui_itemdialog.h"
#include "mainwindow.h"

ItemDialog::ItemDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ItemDialog)
{
    ui->setupUi(this);
    setWindowTitle("Status Dialog");
setFixedSize(QWidget::sizeHint());
}

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

 void ItemDialog::on_pushButton_clicked()
{
    MainWindow obj;
    obj.okbuttonclicked(ui->lineEdit->text());
}

Ответы [ 2 ]

0 голосов
/ 05 марта 2012

Это зависит от того, для чего вы хотите этот диалог. Либо это модальное диалоговое окно - своего рода информационный дисплей или повтор, который блокирует функцию вашей программы, пока пользователь не отреагирует, или , это своего рода набор инструментов или аналогичный, в этом случае вам, вероятно, не следует использовать QDialog .

Если вам нужно модальное диалоговое окно с редактированием строки и / или дополнительными функциями, вам следует прочитать QDialog в документе. Смотрите функцию exec(). Основное использование будет выглядеть так:

void MainWindow::displaydialog()
{
  ItemDialog *dialog = new ItemDialog();

  if (dialog->exec() == someApropriateReturnStatus)
  {
    QString somevalue = dialog->someValue();
    int dialog->someOtherValue();
    //do something with the value
  }

  delete dialog;
}

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

Если вам достаточно простого редактирования строки, вам лучше воспользоваться одним из стандартных диалогов, уже реализованных в Qt, взгляните на Пример стандартных диалогов

0 голосов
/ 05 марта 2012

Пожалуйста, просмотрите пример, такой как этот: http://qt -project.org / doc / qt-4.8 / designer-using-a-ui-file.html

Это объясняеткак использовать файлы пользовательского интерфейса, которые вы генерируете из Qt Designer.Вы не должны думать о них как о «файлах пользовательского интерфейса» в смысле доступа к ним в виджетах вашего класса.Идея состоит в том, что вы включаете их, а затем используете их функцию setupUi(), чтобы применить их к вашему данному классу.В этот момент все, что вы создали в qt designer и что находится в этом файле пользовательского интерфейса, теперь является членом вашего класса.Доступ к ним можно получить через имена, которые вы использовали в qt designer.

Что касается того, почему ваш диалог не отображается ... Я не знаю, потому что вы включили только 3 строки кода в качестве примера.Теоретически он должен показать, правильно ли настроен Mydialog.Вы можете просто попробовать изменить его на QDialog, чтобы убедиться, что вы не сделали ничего плохого с вашим пользовательским классом.

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