Qt不显示子窗口小部件

时间:2012-03-05 18:17:25

标签: c++ qt

如何访问班级儿童的ui文件。让我们说MainWindow类有两个子对话框。我想访问LINEEDIT对话框,以便我可以从那里获取文本。同样,如何在QT中访问子类中父级的ui文件。注意:我没有从Parent类继承任何东西。 我已经写了下面的代码,以便显示一个对话框,但它不会显示!

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

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

如何访问ui小部件,例如检查是否已选择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 :(得分:0)

请查看以下示例:http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html

它解释了如何使用从Qt Designer生成的ui文件。您不应该将它们视为“ui文件”,即在您的类中的小部件上访问它们。这个想法是你包含它们,然后使用它们的setupUi()函数将它们应用到你给定的类中。此时,您在qt designer中创建的所有内容,即该ui文件中的内容,现在都是您的类的成员。可以通过qt designer中使用的命名来访问它们。

至于为什么你的对话框没有显示...我不知道,因为你只包括3行代码作为例子。从理论上讲,它应该显示Mydialog是否已正确设置。您可以尝试将其更改为QDialog,以确保您的自定义类没有出错。

答案 1 :(得分:0)

这取决于你想要的对话框。要么它是一个模态对话框 - 某种信息显示或反击阻止程序的功能,直到用户做出反应,它是某种工具箱或类似物,在这种情况下你可能不应该使用{{ 1}}。

如果您想要一个带有线条编辑和/或其他功能的模态对话框,您应该阅读文档中的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; } 类在内部处理UI并相应地实现getter函数,不应该(在大多数情况下)从外部访问它的UI。

如果你想要一个简单的线条编辑,你最好使用Qt中已经实现的标准对话框之一,看一下Standard Dialogs Example