2012-03-05 83 views
0

我如何訪問一個班的孩子的ui文件。讓我們說MainWindow類有兩個子對話框。我想訪問對話的LINEEDIT,以便我可以從那裏取文本。同樣如何訪問QT中的子類中的父類的ui文件。注意:我沒有從Parent類繼承任何東西。 我已經寫了下面的代碼,爲了顯示一個對話框,但它不會顯示!Qt不顯示子部件

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()); 
} 
+0

1.是'叫在displaydialog'功能所有? 2. Mydialog的ctor是否正確執行?和3.最重要的是:不要直接訪問另一個對話框的UI。相反,在'Mydialog'類中寫入一個訪問器成員函數(getter和/或setter)。對話框的UI只能在內部處理。 – kralyk 2012-03-05 18:27:46

回答

0

請仔細閱讀這樣一個例子是:http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html

它說明了如何使用您的Qt設計生成UI文件。您不應該將它們視爲「ui文件」,而是將它們放在您班級的小部件上。這個想法是,你包括它們,然後使用它們的setupUi()函數將它們應用到給定的類。在這一點上,你在qt designer中創建的所有東西,就是那個ui文件,現在是你類的成員。他們可以通過您在qt designer中使用的命名來訪問。

至於爲什麼你的對話框不顯示......我不知道,因爲你只包括3行代碼作爲例子。理論上它應該顯示Mydialog是否設置正確。您可以嘗試將其更改爲QDialog以確保您的自定義課程沒有任何問題。

+0

現在查看代碼 – scorpion 2012-03-05 18:35:47

0

這取決於你想要什麼對話框。要麼是模態對話框 - 某種信息顯示或回覆會阻止程序的功能,直到用戶作出反應,這是一些工具箱或類似的東西,在這種情況下,您可能不應該使用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類內部處理的UI,並相應地實現了吸氣功能,您不應該(在最典型的情況下)訪問它從外部的UI。

如果一個簡單的行編輯爲你想要的,你會更好使用Qt的已經實施的標準對話框中的一個,看看在Standard Dialogs Example