代码之家  ›  专栏  ›  技术社区  ›  GG.

如何为qt设计器设计的对话框提供输入

  •  1
  • GG.  · 技术社区  · 16 年前

    我是一个Qt初学者,与Qt设计师合作开发一些小的UI元素。我读 http://doc.trolltech.com/4.5/designer-using-a-ui-file.html 在我的代码中使用这些GUI元素并使用多重继承方法。

    我介绍的书签功能有点像 http://img293.imageshack.us/img293/3041/screenshotyb.png . 现在我面临的问题是如何在下拉列表中显示所有现有书签文件夹(比如文件夹位于QVector中)。所以我的主要问题是如何将一些输入传递给ui元素。

    我想我很清楚,如果需要进一步解释,请告诉我。很抱歉直接添加链接,浏览器中的格式设置不起作用。

    编辑: 正如一些人建议的,我必须通过代码,但在这种情况下,有可能创建所有其他组件,如文本编辑、标签、按钮,并使用代码添加组合框。因为我已经为书签开发了代码,并在已经存在的东西中添加了文件夹功能。

    谢谢你的建议。 最后我想出了解决办法。我正在使用qt设计器生成的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
    }
    
    2 回复  |  直到 16 年前
        1
  •  3
  •   Jérôme    16 年前

    Qt Designer ,可以向组合框中添加项(双击组合框以显示编辑器)。但是如果你的文件夹列表不同,你必须按代码来做。

    看一看 QCombobox 文档(qt-doc非常好)。

    如何将文件夹存储在矢量中?作为字符串?

    你的 QVector 包含字符串,可以轻松地将其转换为 QStringList 并使用它填充组合框:

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

    然后,您可以连接信号 currentIndexChanged(const QString&) 你的 QComboBox 到一个插槽,以便在文件夹更改时执行某些操作。

        2
  •  0
  •   cnebrera    16 年前

    我认为你必须用代码来做。一旦使用静态值,就可以在设计器中填充组合框。这是您动态执行的操作,例如获取书签文件夹,然后您必须在业务逻辑代码中执行该操作。

    也许QtDesigner在我上次使用后已经得到了改进,现在可以做那样复杂的事情了,但即使这样,根据我的经验,我还是建议你不要太依赖QtDesigner。如果你想做复杂的事情,在代码中做起来更快,你会犯更少的错误,对你正在做的事情有更多的控制。

    您可以这样设置组合框的值:

    假设向量以字符串形式包含文件夹名,称为文件夹。

    对于(int i=0;i<folders.count();i++)
    {
    ComboBox.AddItem(folders.at(i));
    }

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