2010-06-14 182 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));
}

如果这不是你要找的,给我一个评论,我会尽力帮忙。