2010-06-14 183 views
2

我是一名Qt初學者,並與Qt Designer合作開發一些小型UI元素。我讀http://doc.trolltech.com/4.5/designer-using-a-ui-file.html在我的代碼中使用這些GUI元素並使用多重繼承方法。如何爲由Qt Designer設計的對話框提供輸入

我正在介紹書籤功能,有點像http://img293.imageshack.us/img293/3041/screenshotyb.png。現在,我面臨的問題是如何顯示下拉列表中的所有現有書籤文件夾(說文件夾在QVector中)。所以我的主要問題是如何將一些輸入傳遞給UI元素。

我想我很清楚,如果需要進一步解釋,請告訴我。對不起,直接添加鏈接,豐富的格式在我的瀏覽器不起作用。

編輯: 正如一些建議,我不得不通過代碼,但在這種情況下,可能創建所有其他組件如textEdit,標籤,按鈕和使用代碼添加組合框。因爲我已經開發了書籤代碼並在已有的東西中添加了文件夾功能。

謝謝您的建議。 最後我想出瞭解決方案。我正在使用由QT Designer生成的UI文件的多繼承實現。因此,解決方案是這樣的:

 
Dialog.ui will be UI file generated by QtDesigner 
//bookmarDialog.h 
#include "ui_Dialog.h" 
class BookmarkDialog : public QWidget, private Ui::Dialog 
{ 
Q_OBJECT 

public: 
    BookmarkDialog (QWidget *parent = 0); 
} 

//bookmarkDialog.cpp 
#include "bookmarkDialog.h" 
BookmarkDialog::BookmarkDialog() 
: QWidget(parent) 
{ 
    setupUi(this); 

    QList folders = getAllFolders(); 
    comboBox->insertItems(0,folders);//comboBox is defined in UI file 
} 

回答

4

隨着Qt Designer,您可以將項目添加到組合框(在組合框中雙擊顯示編輯器)。但是,如果你的文件夾列表會有所不同,你必須通過代碼來完成。

看看QCombobox文檔(Qt文檔真的很好)。

如何將文件夾存儲在向量中?作爲字符串?

伊爾你QVector是包含字符串,你可以很容易地將它轉換成QStringList,並用它來填充組合框:

QVector<QString> FolderList;  
myComboBox->addItems(FolderList.toList()); 

然後,您可以連接信號currentIndexChanged(const QString&)QComboBox的一個槽做當文件夾發生變化時。

+0

謝謝,我得到它的工作 – 2010-06-15 02:59:07

1

我認爲你必須在代碼中完成它。一旦您使用靜態值,您可以立即填寫設計器中的組合框。這是您正在動態獲取書籤文件夾所做的事情,您必須在業務邏輯代碼中執行此操作。

也許QtDesigner自上次使用以來已經得到改進,現在可以做類似的複雜事情,但即使在這種情況下,根據我的經驗,我建議您不要過分依賴QtDesigner。如果你想做複雜的事情,在代碼中做得更快,你會犯的錯誤更少,並會更好地控制你正在做的事情。

您可以設置的值:這樣的組合框:

假設載體包含的文件夾名稱作爲字符串,被稱爲文件夾。

對(INT I = 0;我< folders.count();我++)
{
comboBox.addItem(文件夾。位於(i));
}

如果這不是你要找的,給我一個評論,我會盡力幫忙。