gpt4 book ai didi

c++ - 将两个功能合二为一

转载 作者:行者123 更新时间:2023-11-30 05:49:16 25 4
gpt4 key购买 nike

在我的应用程序中,当单击“打开文件”菜单并选择一个文件时,所选项目(3D 对象文件)将添加到 listwidget 上。如果在列表中双击该项目,该项目将显示在 listwidget 旁边的屏幕上。但是,为了简化用户界面,我希望在不双击的情况下将项目添加到列表中并同时显示在屏幕上。简而言之,我想将 void MainWindow::on_actionOpen_Model_triggered()MainWindow::on_listWidget_itemDoubleClicked(QListWidgetItem *item) 这两个函数合并为一个。

void MainWindow::on_actionOpen_File_triggered()
{
QFileDialog diag(this);
diag.setNameFilter(tr("STL files(*.stl)"));
diag.setFileMode(QFileDialog::ExistingFiles);
diag.setViewMode(QFileDialog::Detail);
QStringList fileNames;

fileNames = diag.getOpenFileNames(this, "Open Model Files", "", "STL Files (*.stl)");
//qDebug()<<QFileInfo(fileNames).absoluteDir();
qDebug()<<fileNames;
ui->listWidget->addItems(fileNames);}

我试着像这样在打开文件函数的末尾添加 itemDoubleClicked 函数。

this->on_listWidget_itemDoubleClicked(ui->listWidget->currentItem());

但是,每当我打开一个文件时,应用程序就会停止运行。我猜这是因为所选文件尚未添加到 listwidget 中,并且在同一函数中,双击函数会尝试加载它。由于双击函数将 QListWidgetItem *item 作为其参数。将这两者结合起来对我来说似乎不是一件容易的事。有人有想法吗?我们将不胜感激。

最佳答案

I guess it's because the selected file is not added yet on the listwidget and in the same function the double clicked function tries to load it.

不,这是因为 QListWidget::currentItem() 检索列表小部件中具有焦点的项目。仅仅将项目添加到列表小部件不会给予任何项目焦点,因此 QListWidget::currentItem() 返回一个空指针。

您有几个选项可以解决这个问题。您可以使用列表小部件中的最后一项调用 on_listWidget_itemDoubleClicked() 函数:

QListWidgetItem* item = ui->listWidget->item(ui->listWidget->count()-1);
this->on_listWidget_itemDoubleClicked(item);

恕我直言,这有点乱。为什么不从 on_listWidget_itemDoubleClicked() 中提取一个带有文件名参数的函数?然后,只需从 on_listWidget_itemDoubleClicked()on_actionOpen_File_triggered() 调用函数:

void MainWindow::on_listWidget_itemDoubleClicked(QListWidgetItem* item)
{
showModel(item->text());
}

void MainWindow::on_actionOpen_File_triggered()
{
QFileDialog diag(this);
// Code for file dialog goes here.
QStringList fileNames;

fileNames = diag.getOpenFileNames(this, "Open Model Files", "",
"STL Files (*.stl)");
ui->listWidget->addItems(fileNames);
showModel(fileNames.last());
}

void MainWindow::showModel(const QString& fileName)
{
// Code to show model goes here.
}

关于c++ - 将两个功能合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27830265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com