Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ qt5设计器,使用fileopen,在lineedit中显示文件路径,这样做有问题吗?_C++_Qt_Qt5_Qlineedit_Qfiledialog - Fatal编程技术网

C++ qt5设计器,使用fileopen,在lineedit中显示文件路径,这样做有问题吗?

C++ qt5设计器,使用fileopen,在lineedit中显示文件路径,这样做有问题吗?,c++,qt,qt5,qlineedit,qfiledialog,C++,Qt,Qt5,Qlineedit,Qfiledialog,刚开始使用qt, 浏览了文档、谷歌、示例等。。试图找到简单的例子(请记住) 这表明了如何做(imho)简单的事情,自己。 我偶然发现了我的答案,我想知道,随着代码变得更加复杂,这种方法是否会在以后引起问题。 本例中包含的内容比需要的多,但这是直接从工作代码中获得的。 mainwindow.h: 我补充说 之后 Ui::MainWindow*Ui; 我补充说 QLineEdit*vpkPathTxt; 在mainwindow.cpp中: 之后 我补充说 connect( this->

刚开始使用qt, 浏览了文档、谷歌、示例等。。试图找到简单的例子(请记住) 这表明了如何做(imho)简单的事情,自己。 我偶然发现了我的答案,我想知道,随着代码变得更加复杂,这种方法是否会在以后引起问题。 本例中包含的内容比需要的多,但这是直接从工作代码中获得的。 mainwindow.h: 我补充说

之后 Ui::MainWindow*Ui; 我补充说 QLineEdit*vpkPathTxt; 在mainwindow.cpp中: 之后

我补充说

    connect( this->ui->vpkButton, SIGNAL( clicked() ), this, SLOT(vpkButton_clicked()) );
要将我的ui按钮连接到正确的插槽,问题是如何从vpkButton_clicked()获取字符串以显示在我在designer中进行的编辑行中, 最终对我有用的是,接下来添加了以下内容:

    vpkPathTxt = this->ui->vpkPathTxt;
my main.cpp中的功能变得非常简单: (顶部的QString声明位于空隙外部)

void主窗口::vpkButton_clicked()
{
vpkName=QFileDialog::getOpenFileName(此,
tr(“打开VPK文件”),“~/”,tr(“VPK文件(*_dir.VPK)”);
vpkPathTxt->setText(vpkName);

QTuffGe())P>您的插槽中的一个问题是,您不考虑用户丢弃“打开文件”对话框的情况。在这种情况下,函数<代码> QFielDeLabel::GETOpenFrimeNe>代码返回一个空QString,因此,如果返回值不是空字符串:

,您只需继续执行逻辑即可。
if (!vpkName.isNull()) {
    ...
}
第二个问题如下,我做了一些假设,因为我没有看到您的完整代码:

我猜您希望使用用户在对话框中选择的文件名加载文件。但您也在“编辑”行中设置了文件名,用户可以手动编辑。我还猜实际的文件加载发生在不同的步骤中(即,单击另一个按钮后),因此,用户在“编辑”行中手动编辑文件名后,它将与局部变量中的文件名不同

加载文件时,我会读取行编辑的内容,而不是变量
vpkName
,因此手动编辑将得到尊重


另一种方法是观察行编辑的编辑,并反映变量中的更改。然后,在以后加载文件时,可以读取变量而不是行编辑。

为什么要使用另一个变量
vpkPathTxt
指向
ui->vpkPathTxt
?只需保存一些输入
ui
指针背后的dea是它封装了所有ui元素,因此不会“干涉”类中的逻辑内容需要其他变量。此外,
this->
是可选的;我将省略它。这是因为
vpkPathTxt
是在其他语句中使用的未初始化指针。将它们替换为
ui->vpkPathTxt
,并删除头文件中的变量。如果我正确理解了,您就成功了h在
Ui::main window*Ui
下面的标题中有一个变量。不使用“vpkPathTxt=this->Ui->vpkPathTxt;”当我使用“Ui->vpkPathTxt.setText(vpkName)”选择将在其中显示其路径的文件时,应用程序将简单地取消显示失败得很惨,可能是因为我没有进行正确的连接/Ok您描述的最后一件事很奇怪。请尝试以下操作:删除连接并将插槽重命名为\u vpkButton_clicked()上的
;这将为您自动将其连接到信号。您可以右键单击小部件上的设计器,选择“转到插槽”,而不是手动写入插槽名称,选择插槽,它将被相应地创建。先生,您太棒了!!!非常感谢您抽出时间回答我。谢谢,用右键单击添加插槽效果很好(它还将代码放在正确的页面上)。祝您今晚有很棒的梦想。:)
    vpkPathTxt = this->ui->vpkPathTxt;
void MainWindow::vpkButton_clicked()
{
    vpkName = QFileDialog::getOpenFileName(this,
        tr("Open VPK File"), "~/", tr("VPK Files (*_dir.vpk)"));
    vpkPathTxt->setText(vpkName);
    qDebug() << vpkName;
}
if (!vpkName.isNull()) {
    ...
}