我正在使用Qt,我需要一些帮助
如何在Qt中全局声明QStringList
变量,以便我可以在任何函数中访问它?
如何打印QStringList
中的所有内容(它包含从QFileDialog
获取的文件路径)到lineEdit
?
我试过了:
ui->lineEdit->setText(filename);
但是它给了我错误错误:QString
要求的非标量类型QStringList
。
请举几个例子。
答案 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。