小编gil*_*123的帖子

不能在QTreeFilterProxyModel的QTreeView点击信号中使用itemFromIndex

我在视图和QStandardItemModel之间有一个带有QSortFilterProxyModel的QTreeView来对树进行排序.然后我想通过clicked()信号对视图中的点击进行操作.

模型/视图的设置类似于:

mymodel  = new QStandardItemModel(5, 5, this);
mysort = new MySortProxy(this);
mysort->setSourceModel(mymodel);
myview = new QTableView(this);
myview->setSourceModel(mysort);
connect(myview, SIGNAL(clicked(QModelIndex)), this, slot(clickAction(QModelIndex)));
Run Code Online (Sandbox Code Playgroud)

这个设置都可以按照我想要的方式对我的数据进行排序和排序.单击某个项目时,将调用clickAction()槽,并单击该项目的索引.然后我尝试从插槽中的索引中获取项目:

void myclass::clickAction(const QModelIndex &index)
{
    QStandardItem *item = mymodel->itemFromIndex(index);
}
Run Code Online (Sandbox Code Playgroud)

但是,itemFromIndex返回NULL.

如果我删除了QSortFilterProxyModel并将模型直接设置为视图中的sourcemodel,那么一切都可以正常工作.即

myview->setSourceModel(mymodel);    // was setSourceModel(mysort);
Run Code Online (Sandbox Code Playgroud)

mymodel-> itemFromIndex(index)现在按预期返回项目,但显然现在我无法使用自己的排序代理.

任何人都能告诉我我做错了什么以及当我有一个sortfilter代理时我如何在点击槽中获取该项目?

我正在使用Qt-4.3.1.

感谢您的帮助,Giles

qt

6
推荐指数
1
解决办法
4737
查看次数

使用qFromBigEndian编译错误

我正在尝试使用qFromBigEndian从通过udp套接字接收的字节流中读取32位int.

void processData(uchar *data)
{
  qint32 addr;
  addr = qFromBigEndian(data);
}
Run Code Online (Sandbox Code Playgroud)

编译它会出现以下错误: 错误:从'uchar*'到'qint32'的转换无效

Qt文档说:

T qFromBigEndian(const uchar*src)

Reads a big-endian number from memory location src and returns the number in the host byte order representation. Note: Template type T can either be a qint16, qint32 or qint64.

显然我做的事情有点傻,而且我已经羞愧地垂头丧气了.有人可以解释我明显的错误吗?

c++ qt templates

3
推荐指数
1
解决办法
2065
查看次数

CMake"make install"输出找不到Redhat下的共享Qt库

我有一个Qt项目,我正在使用CMake进行配置和构建.当我输入"make"来构建应用程序时,它会在我的构建目录中创建一个应用程序,并且一切正常.但是,当我键入"make install"以安装到发布目录中时,生成的可执行文件将无法运行,因为它无法找到共享库.我收到一个错误说:

release/testapp: error while loading shared libraries: libQtGui.so.4: cannot open shared     object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

什么是"make install"对可执行文件做什么?我以为它只会复制文件,它必须对文件做一些事情.我试图从同一个终端执行这两个文件,所以我的环境是相同的.

以下是发行目录中可执行文件的ldd输出(从"make install"生成):

    libQtGui.so.4 => not found
    libQtCore.so.4 => not found
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00906000)
    libm.so.6 => /lib/tls/libm.so.6 (0x00695000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x008fa000)
    libc.so.6 => /lib/tls/libc.so.6 (0x00567000)
    /lib/ld-linux.so.2 (0x00548000)
Run Code Online (Sandbox Code Playgroud)

然而,如果我在构建目录中的可执行文件(从"make"创建)上运行ldd,它将输出以下内容:

    libQtGui.so.4 => /usr/local/Trolltech/Qt-4.7.3/lib/libQtGui.so.4 (0x00560000)
    libQtCore.so.4 => /usr/local/Trolltech/Qt-4.7.3/lib/libQtCore.so.4 (0x00111000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x003ec000)
    libm.so.6 => /lib/tls/libm.so.6 (0x004b7000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x004da000)
    libc.so.6 => /lib/tls/libc.so.6 (0x033fe000)
    libpthread.so.0 => /lib/tls/libpthread.so.0 (0x004e4000)
    libgthread-2.0.so.0 => …
Run Code Online (Sandbox Code Playgroud)

linux qt redhat cmake

2
推荐指数
1
解决办法
3003
查看次数

标签 统计

qt ×3

c++ ×1

cmake ×1

linux ×1

redhat ×1

templates ×1