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

问题描述 投票:0回答:2

我使用Qt和我需要一些帮助

  1. 如何申报QStringList变量在全球范围内的Qt,这样我可以在任何函数访问它?
  2. 如何打印在QStringList所有的东西(它包含从QFileDialog拿走的文件路径)到lineEdit

我试过了:

ui->lineEdit->setText(filename);

但它给了我错误的错误:QString到要求的非标型QStringList。请给我一些例子。

c++ qt qt4 qt4.8
2个回答
2
投票

如何申报在全球范围内的Qt QStringList中的变量,这样我可以在任何函数访问

嗯,这是不是一个Qt问题,而是一般的C ++一个(全局变量,在这些天皱起了眉头,更可接受的等价物是单身,所以搜索了很多例子)。然而,这样做的一个方法是创建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]);

还记得QStringListQVector< QString >导出,这样你就可以访问个人QStrings就像任何元素。

只是为了扩大你的第一个问题,有办法字符串列表可以合并成一个单一的一个无穷数。但随着QStringList非常常见(容易)的方法是使用join()

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

我真的建议使用docs,Qt的辉煌。


1
投票

你应该重新考虑使用全局变量;它通常是更好地传递给需要访问它的功能的引用,但如果你一定要,你这是怎么做到这一点。把定义为正常在源文件中的一个

QStringList foo;

并放在一个头文件extern声明,你在所有你想用它在这样的文件包括

extern QStringList foo;

希望通过串线编辑也似乎被误导的列表;它会更好,只是传递一个字符串喜欢它预计,但如果你绝对必须在列表传给你将不得不继承QLineEdit的,并给它取一个字符串列表,并从它传递给该列表获取字符串的方法QLineEdit的::的setText。

© www.soinside.com 2019 - 2024. All rights reserved.