全局声明QStringlist变量,使用QFileDialog获取位置路径并将其打印到lineEdit并在QProcess中使用它

时间:2012-08-02 16:27:47

标签: c++ qt qt4 qt4.8

我正在使用Qt,我需要一些帮助

  1. 如何在Qt中全局声明QStringList变量,以便我可以在任何函数中访问它?

  2. 如何打印QStringList中的所有内容(它包含从QFileDialog获取的文件路径)到lineEdit

  3. 我试过了:

    ui->lineEdit->setText(filename);
    

    但是它给了我错误错误:QString要求的非标量类型QStringList。 请举几个例子。

2 个答案:

答案 0 :(得分:2)

  

如何在Qt中全局声明QStringList变量,以便我可以在任何函数中访问它

这不是一个Qt问题,而是一个普通的C ++问题(全局变量在这些日子里不受欢迎,一个更可接受的等价物是单例,搜索很多例子的SO)。尽管如此,实现此目的的一种方法是将QStringList创建为实例化QFileDialog的类的静态成员,同样的类将是从对话框中检索它的类,并且通过存储(它静态地让你有效地使它成为全球性的:

class A
{
public:
    void openFileDialog() { // Open the dialog, and store the results in list_. }
    static const QStringList& getFileList() { return list_; }
private:
    static list_;
}

// Just call by:
QStringList list = A::getFileList();
  

如何在QStringList中打印所有内容(它包含从QFileDialog中获取的文件路径)

     

是的,我的QStringList只包含1个字符串

好吧,如果您的QStringList只包含一个字符串,请使用:

ui->lineEdit->setText(list_[0]);

请记住QStringList来自QVector< QString >,因此您可以像访问任何元素一样访问各个QString

为了扩展您的第一个问题,可以通过无数种方式将字符串列表组合成一个字符串。但使用QStringList的一个非常常见(且简单)的方法是使用join()

QStringList list; list << "This" << "is" << "a" << "list.";
list.join( " " ); // "This is a list. "

我真的建议使用docs,Qt很棒。

答案 1 :(得分:1)

你应该重新考虑使用全局变量;通常最好将引用传递给需要访问它的函数,但如果必须,这就是你的工作方式。在您的一个源文件中正常定义

QStringList foo;

并在一个头文件中放置一个extern声明,你要包含在你想要使用它的所有文件中

extern QStringList foo;

想要将字符串列表传递给行编辑也似乎是错误的;最好只传入一个像它期望的字符串,但如果你绝对必须传入一个列表,你必须子类化QLineEdit并给它一个方法,它接受一个字符串列表并从该列表中获取一个字符串,它传递给QLineEdit的::的setText。