0

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

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

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

我试过了:

ui->lineEdit->setText(filename);

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

4

2 回答 2

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]);

请记住 aQStringList派生自,因此您可以像访问任何元素一样QVector< QString >访问单个s。QString

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

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

我真的推荐使用文档,Qt 非常棒。

于 2012-08-02T16:48:28.163 回答
1

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

QStringList foo;

并将 extern 声明放在一个头文件中,该文件包含在您想要使用它的所有文件中,就像这样

extern QStringList foo;

想要将字符串列表传递给行编辑似乎也被误导了。最好只像预期的那样传入一个字符串,但是如果你绝对必须传入一个列表,你必须继承 QLineEdit 并给它一个方法,该方法接受一个字符串列表并从它传递的列表中获取一个字符串QLineEdit::setText。

于 2012-08-02T16:47:24.507 回答