从主窗口的菜单向 qt 选项卡小部件发送文件名

Sending a file name to a qt tabWidget from main window's menu

本文关键字:小部 文件名 选项 qt 窗口 菜单      更新时间:2023-10-16

我正在使用qt构建一个具有多个选项卡的文件编辑器,每个选项卡对应于一个文件。在主窗口中.cpp我有以下功能:

    void MainWindow::on_actionOpen_triggered()
    {
        QString fileName = QFileDialog::getOpenFileName(this,"Open File","/home",tr("*.ext"));
    }

我需要将文件名发送到我的选项卡小部件的新选项卡。我知道 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的末尾,我需要在哪里添加其余代码来接收它?

我假设在我的自定义编辑器类中。

例如,您的代码可能如下所示:

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 + 文件名存储在容器中,以便您可以轻松查询哪个页面对应于哪个文件。


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填充编辑器。

没有选项卡创建事件。您需要执行以下步骤,我认为您不需要任何信号/插槽机制。我认为您在问题中包含的插槽是QMainWindow的成员功能。我认为你的QTabWidget也是你的QMainWindow的一部分,所以你只需要这样做:

void onActionTriggered()
{
    const QString filename = // ...
    ui.TabWidget->addTab( /* Your custom class derived from QWidget or a Qt widget */, filename );
}