从主窗口的菜单向 qt tabWidget 发送文件名
Posted
技术标签:
【中文标题】从主窗口的菜单向 qt tabWidget 发送文件名【英文标题】:Sending a file name to a qt tabWidget from main window's menu 【发布时间】:2015-04-30 19:17:06 【问题描述】:我正在使用 qt 构建具有多个选项卡的文件编辑器,每个选项卡对应一个文件。在 mainwindow.cpp 我有这个功能:
void MainWindow::on_actionOpen_triggered()
QString fileName = QFileDialog::getOpenFileName(this,"Open File","/home",tr("*.ext"));
我需要将 fileName 发送到我的选项卡小部件的新选项卡。我知道 qt 中有类的信号和插槽,但我一生都无法弄清楚如何将 QString 发送到特定选项卡。有没有办法将文件名发送到选项卡的创建事件,或者可能使用选项卡的索引来发送信号?
我对 qt 很陌生,但我很确定这应该是一个简单的过程。我就是想不通。
提前致谢!
编辑:完全修改后的代码,两者都作为主窗口的成员:
void MainWindow::on_actionOpen_triggered()
if (fileName!=NULL)
int curtab=ui->fileTabWidget->addTab(new my_editor,tr("editor"));
ui->fileTabWidget->setCurrentIndex(curtab);
所以遵循@vizhanyolajos 的指示;如果我将文件名传递到 addTab 的末尾,我需要在哪里添加其余代码以接收它?
我假设在我的自定义编辑器类中。
【问题讨论】:
有很多方法。你能添加你的标签创建代码吗? @deW1 在上面添加。如果你也想要类声明,请告诉我。 【参考方案1】:您的代码可能如下所示:
void MainWindow::on_actionOpen_triggered()
QString fileName = QFileDialog::getOpenFileName(this,"Open File","/home",tr("*.ext"));
createNewPage( index , name , fileName );
createNewPage( int index , QString name , QString fileName )
// your page creation code goes here
// your fileOpen and fill textBox code goes here where you can use the fileName for it
我建议您将 pageIndex + fileName 存储在容器中,以便您可以轻松查询哪个页面对应于哪个文件。
void MainWindow::on_actionOpen_triggered()
QString fileName = QFileDialog::getOpenFileName(this,"Open File","/home",tr("*.ext"));
if (fileName!=NULL)
ui->fileTabWidget->addTab(new my_editor( fileName ),tr("editor"));
ui->fileTabWidget->setCurrentIndex(curtab);
只需将fileName
传递给my_editor
小部件的构造函数即可。
在那里,您可以调用您的函数,然后用 fileName
填充您的编辑器。
【讨论】:
@MoffD 更新了我的帖子。如果还有其他不清楚的地方,请告诉我。 感谢帮助,我使用了 vizhanyolajos 的 addTab(/*class data*/, fileName) 方法【参考方案2】:没有标签创建事件。您需要执行以下步骤,我认为您不需要任何 SIGNAL/SLOT 机制。我认为您在问题中包含的 SLOT 是您 QMainWindow 的成员函数。而且我认为您的 QTabWidget 也是您的 QMainWindow 的一部分,因此您只需要这样做:
void onActionTriggered()
const QString filename = // ...
ui.TabWidget->addTab( /* Your custom class derived from QWidget or a Qt widget */, filename );
【讨论】:
我很确定这就是我所需要的,然后我只需设置类以使该额外参数正确吗? 在您修改的代码中,您应该将 (fileName != NULL ) 更改为之前使用的 QString fileName = QFileDialog::getOpenFileName( ... ) 然后检查是否 ( !fileName.isEmpty() )。之后将该文件名作为第二个参数传递给 addTab( ... )。如果您的自定义小部件还需要文件名,那么也将它传递给它 new my_editor(fileName)。以上是关于从主窗口的菜单向 qt tabWidget 发送文件名的主要内容,如果未能解决你的问题,请参考以下文章