我正在使用 Qt,我需要一些帮助
如何
QStringList
在 Qt 中全局声明变量以便我可以在任何函数中访问它?如何将所有内容
QStringList
(它包含从中获取的文件路径QFileDialog
)打印到一个lineEdit
?
我试过了:
ui->lineEdit->setText(filename);
但它给了我错误错误:请求QString
非标量类型QStringList
。请给我一些例子。
如何在 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 非常棒。
您应该重新考虑使用全局变量;通常最好将引用传递给需要访问它的函数,但如果必须,这就是你的做法。将定义照常放在您的一个源文件中
QStringList foo;
并将 extern 声明放在一个头文件中,该文件包含在您想要使用它的所有文件中,就像这样
extern QStringList foo;
想要将字符串列表传递给行编辑似乎也被误导了。最好只像预期的那样传入一个字符串,但是如果你绝对必须传入一个列表,你必须继承 QLineEdit 并给它一个方法,该方法接受一个字符串列表并从它传递的列表中获取一个字符串QLineEdit::setText。