Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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
从QTreeView连接信号/插槽时出现故障 我对C++和Qt创建者都是全新的。我想单击treeView中的一个文件夹,然后作为响应,对该目录中的数据进行处理。现在,我只是想连接信号/插槽,所以我只想在单击树项目时在“testLabel”中写入一些内容。。 我已经尝试了几个小时了,搜索论坛和文档,尝试各种各样的事情。代码总是进行编译,但单击、选择、双击时不会发生任何情况。 代码如下:_C++_Qt - Fatal编程技术网

从QTreeView连接信号/插槽时出现故障 我对C++和Qt创建者都是全新的。我想单击treeView中的一个文件夹,然后作为响应,对该目录中的数据进行处理。现在,我只是想连接信号/插槽,所以我只想在单击树项目时在“testLabel”中写入一些内容。。 我已经尝试了几个小时了,搜索论坛和文档,尝试各种各样的事情。代码总是进行编译,但单击、选择、双击时不会发生任何情况。 代码如下:

从QTreeView连接信号/插槽时出现故障 我对C++和Qt创建者都是全新的。我想单击treeView中的一个文件夹,然后作为响应,对该目录中的数据进行处理。现在,我只是想连接信号/插槽,所以我只想在单击树项目时在“testLabel”中写入一些内容。。 我已经尝试了几个小时了,搜索论坛和文档,尝试各种各样的事情。代码总是进行编译,但单击、选择、双击时不会发生任何情况。 代码如下:,c++,qt,C++,Qt,主窗口。h: #pragma once #include <QtWidgets/QMainWindow> #include "ui_main_window.h" class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = Q_NULLPTR); public slots: void on_pushButtonImport_

主窗口。h:

#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_main_window.h"


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = Q_NULLPTR);

public slots:
    void on_pushButtonImport_clicked(); // use this to let user choose a directory and update tree
    //void on_treeItem_double_clicked(); // slot to receive signal of treeView.. 
    void labelTest_setText(const QModelIndex& index);

private:
    Ui::MainWindowClass ui;
};
#pragma一次
#包括
#包括“ui\u main\u window.h”
类主窗口:公共QMainWindow
{
Q_对象
公众:
主窗口(QWidget*parent=Q_NULLPTR);
公众时段:
void on_pushButtonImport_clicked();//使用此选项让用户选择目录并更新树
//在_treeItem _双击();//插槽上无效以接收treeView的信号。。
void labelTest_setText(常数QModelIndex和索引);
私人:
Ui::MainWindowClass Ui;
};
main_window.cpp:

#include "main_window.h"
#include <QFileSystemModel>
#include <Qstring>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    QObject::connect(ui.treeView, SIGNAL(QTreeView::doubleClicked(const QModelIndex & index)), ui.labelTest, SLOT(labelTest_setText(const QModelIndex & index)));
}

void MainWindow::on_pushButtonImport_clicked() {
    // let user choose a directory to import
    // possibly change this with a pop up window to choose directory
    QString path_string = ui.textEditDirectory->toPlainText();
    // add error handler if text is not a path
    QFileSystemModel* model = new QFileSystemModel();
    // show tree structure
    model->setRootPath(path_string);
    ui.treeView->setModel(model);
    ui.treeView->setRootIndex(model->index(path_string));
}

void MainWindow::labelTest_setText(const QModelIndex &index) {
    std::string test_string = "Test success!";
    QString testing = QString::fromStdString(test_string);
    ui.labelTest->setText(testing);
}
#包括“main_window.h”
#包括
#包括
主窗口::主窗口(QWidget*父窗口)
:QMainWindow(父级)
{
ui.setupUi(这个);
QObject::connect(ui.treeView,信号(QTreeView::双击(常数QModelIndex和索引)),ui.labelTest,插槽(常数QModelIndex和索引));
}
void主窗口::在按钮上导入已单击的内容(){
//让用户选择要导入的目录
//可能会通过弹出窗口选择目录来更改此设置
QString path_string=ui.textEditDirectory->toPlainText();
//如果文本不是路径,则添加错误处理程序
QFileSystemModel*model=新QFileSystemModel();
//显示树结构
模型->设置根路径(路径\字符串);
ui.treeView->setModel(model);
ui.treeView->setRootIndex(模型->索引(路径字符串));
}
void主窗口::labelTest_setText(常量QModelIndex和索引){
std::string test_string=“测试成功!”;
QString testing=QString::fromStdString(测试字符串);
ui.labelTest->setText(测试);
}
我尝试将连接放在按钮点击()上的
函数的末尾,因为当
treeView
获取模型时,会产生相同的结果。我已经尝试了
treeView
等的几个信号,我想我对这些都很不熟悉,我不知道如何连接它们

谢谢你的帮助

>代码>()/<代码>代码> StULL()/Cord>语法是旧的,使用C++预处理器经常会完全无效的事情编译得很好。阅读有关新语法的更多信息

切换到现代语法,如下所示:

QObject::connect(ui.treeView, &QTreeView::doubleClicked,
                 this, &MainWindow::labelTest_setText);
如果您(出于某种原因)仍想使用旧语法,则如下所示:

QObject::connect(ui.treeView, SIGNAL(doubleClicked(QModelIndex)),
                 this, SLOT(labelTest_setText(QModelIndex)));
这使用了规范化语法,因此您不必在函数参数中写入
constqmodel&index
,这是低效的

此外,这在Qt中是完全不必要和低效的:

    std::string test_string = "Test success!";
    QString testing = QString::fromStdString(test_string);
您应该将
QString
直接与
qstringlateral
一起使用(对于文字):


Ui::MainWindowClass Ui这通常是一个指针,您是否手动更改了它?键入:
信号(QTreeView::双击(常数QModelIndex&index))
-->
信号(双击(常数QModelIndex&index))
?更好的是,使用新的.Typo:use
QObject::connect(ui.treeView,SIGNAL(双击(const-QModelIndex&index)),ui.labelTest,SLOT(labelTest_setText(const-QModelIndex&index))ui
设置为
ui*
,所以这真的有点令人惊讶。谢谢,现代语法给出了一个错误,QLabel不包含函数labelTest_setText,旧语法可以编译,但同样没有任何功能。对不起,我对C++和QT(创建者)还很陌生。感谢您对QString的建议!对不起,我的错。更新了答案。现在试试。我在第三个参数中传递了错误的对象。
labelTest_setText()
函数属于MainWindow类,因此connect中的第三个参数将是
这个
,它确实有效!非常感谢你,我想我现在对连接有了更好的理解
    QString testing = QStringLiteral("Test success!");