• 13072阅读
  • 10回复

【提问】comboBox和listview之间如何传递信号::我将一段源码附上,请各位帮忙指点 [复制链接]

上一主题 下一主题
离线rachel
 
只看楼主 倒序阅读 楼主  发表于: 2005-10-12
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
想实现在comboBox中显示目录, 对应的将在listview中显示该目录下的所有文件
  我的信号和槽如下:
connect(loccomboBox, SIGNAL((activated(QString))), this, SLOT(showFile()));

其中showFile()是我自己定义的槽. 可是编译后 各个空间没有任何反应, 好像是没有接收到任何信号 请各位大侠指点 ^_^
[ 此贴被rachel在2005-10-13 09:56重新编辑 ]
离线hqxyn

只看该作者 1楼 发表于: 2005-10-12
估计是这样:
你有个父窗体控件w,里面添加combobox和listview,showFile是listView中的一个slot,connect写在w中,
应把this改成listView的指针。
离线XChinux

只看该作者 2楼 发表于: 2005-10-12
按楼主的意思看,showFile()应该是它在窗口中定义的一个slot,这个slot就直接控制listview里的显示内容了。
楼主可先在showFile()函数里面加写个简单的代码,以看是否确认showFile被调用了。确认后,再写listview相关的代码。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线rachel
只看该作者 3楼 发表于: 2005-10-13
我根据两位的建议 我另写了一小段代码 结果在接收信号的时候还是有问题
现在源码如下: 请各位指点
/******************mainwidget.h*******************************/
#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QtGui>
#include <QtCore>
#include <QComboBox>
#include <QListView>
#include <QVBoxLayout>
#include <QDialog>

class MainWidget: public QDialog
{
     Q_OBJECT
public:
     MainWidget(QWidget *parent = 0);      
       
     QComboBox *mybox;
     QListView *listall;

protected slots:
     void showFile();

};

#endif //MAINWIDGET_H

/******************************mainwidget.cpp**********************************/
#include <QString>

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
     :QDialog(parent)
{

    mybox = new QComboBox;
     listall = new QListView;
       
     QVBoxLayout *mylayout = new QVBoxLayout;
     mylayout->addWidget(mybox);
     mylayout->addWidget(listall);
     mybox->addItem("/");
     mybox->setEditable(TRUE);
     setLayout(mylayout);
 
     connect(mybox, SIGNAL(highlighted(QString)), listall, SLOT(showFile()) );
       

}

void MainWidget::showFile()
{
     printf("print show");

}
/***********************************main.cpp***********************************/
#include <QApplication>
#include <QComboBox>
#include <QListView>
#include <QVBoxLayout>

#include "mainwidget.h"

int main(int argc, char *argv[])
{

       QApplication app(argc, argv);
     MainWidget *mywidget = new MainWidget;
       mywidget->show();
       return app.exec();
}

执行后出现如下错误:Object::connect: no such slot QListView::showFile()
离线XChinux

只看该作者 4楼 发表于: 2005-10-13
Re:【提问】comboBox和listview之间如何传递信号::我将一段源码附上,请各
楼主哇,showFile 是窗体的slot,所以在connect的时候,要用 this ,而不是listview的指针
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线rachel
只看该作者 5楼 发表于: 2005-10-13
我最初是用this的 可是二楼的hqxyn建议我用listview的指针
可是我用this 这个错误信息没有了 但是信号还是没有接收到 这到底是怎么回事呢
离线XChinux

只看该作者 6楼 发表于: 2005-10-13
Re:【提问】comboBox和listview之间如何传递信号::我将一段源码附上,请各
在你的shosFile里用QMessageBox::warning()函数测试。
看看能否接收到。另外,把signal和slot的参数设置为一样最好。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线rachel
只看该作者 7楼 发表于: 2005-10-13
关键在于printf这个函数 我用QMessageBox::warning()函数或者是用cout输出来进行测试都可
以接收到信号 不知道printf是将字符串打印到什么地方去了 反正不在终端也不在控件中
离线flyingwind
只看该作者 8楼 发表于: 2005-11-02
你用的是窗体,用printf是看不到的。
大道泛兮,其可左右!
离线wuxian610
只看该作者 9楼 发表于: 2005-11-02
呜, 楼主试试把信号和槽的参数设置为一样的, 即使是槽里面用不上改参数, 也让他去了,

试试看.
     
      connect(mybox, SIGNAL(highlighted(const QString &)), this, SLOT(showFile( const QString &)) );

                                                                                      wuxian610
离线wuxian610
只看该作者 10楼 发表于: 2005-11-02
恩, 楼主搞好了的话,代码发上来share一下哈,谢谢.
 
      邮箱wuxian610@gmail.com
快速回复
限100 字节
 
上一个 下一个