• 15965阅读
  • 5回复

QListwidget中的item双击后为什么没反应 [复制链接]

上一主题 下一主题
离线rycstar
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-02
我定义了一个QListwidget框,添加了几个item:
frilist=new QListWidget;
frilist->insertItem(1,new QListWidgetItem(QIcon("E:\\13\\33.png"), "fail“));
并将双击后产生的信号与自定义的槽连接起来了:
connect(frilist,SIGNAL(itemDoubleClicked(QListWidgetItem * )),this,SLOT(connectFri(QListWidgetItem * )));
该slot就是显示一个对话框。
但是无论怎么双击就是出现不了。。。
离线dancindream

只看该作者 1楼 发表于: 2009-11-02
你再试试
我这可以,我用的TreeWidget
connect(QT_TreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int )),this, SLOT(ReName(QTreeWidgetItem *)));

你要注意一下
1、ReName(QTreeWidgetItem *)函数要
public slots:来申明
2、如果是自己写的窗体,检查一下头文件里类的定义第一行有没
    Q_OBJECT
离线rycstar
只看该作者 2楼 发表于: 2009-11-02
我加了Q_object后程序出现下面的错误提示:
G:/client2/friendlist.cpp:12: undefined reference to `vtable for friendlist'
离线dancindream

只看该作者 3楼 发表于: 2009-11-02
把代码贴出来把
离线rycstar
只看该作者 4楼 发表于: 2009-11-02
h文件:
class friendlist : public QWidget
{
    Q_OBJECT
public:
        friendlist();
    void setfriendlist();
    void getfriendlist(QVector<QString> list);
    void getgrouplist(QVector<QString> glist);
    void getfriendlistonline(QVector<QString> listonline );
    void changestate(QString num1);
    void getchangename(QString name);
    void Chat(QString num);
    QUdpSocket *udpSocket;
    QVector<QString> frilist0;
    QVector<QString> frilistonline;
    QVector<QString> grouplist0;
    QString changename;
    QString mm;

public slots:
     void show();
     void connectFri(QListWidgetItem *Item);

private:
    QString state;
    quint16 port;
    QWidget * window;
    QWidget * chatWindow;
    QTextEdit *displayText;
    QTextEdit *inputText;
    QPushButton *closeButton;
    QPushButton *sendButton;
    QPushButton * friendButton;
    QPushButton * groupButton;
    QPushButton * quitButton2;
    QDialogButtonBox * buttonBox2;
    QGroupBox * friendbox;
    QGroupBox * groupbox;
    QListWidget * frilist;
    QListWidget * grouplist;
    QListWidgetItem * Item;
};
cpp文件:
friendlist::friendlist()
{
}
void friendlist::show()
{
}

void friendlist::setfriendlist()
{
    window=new QWidget;
    friendButton=new QPushButton(tr("&Friendlist"));//好友按钮
  groupButton=new QPushButton(tr("&Grouplist"));//群按钮
    quitButton2=new QPushButton(tr("&Quit"));
    buttonBox2=new QDialogButtonBox;
    buttonBox2->addButton(quitButton2,QDialogButtonBox::RejectRole);


    QGroupBox *friendBox=new QGroupBox;
    frilist=new QListWidget;
  添加列表
    QGridLayout *fbox=new QGridLayout;
    fbox->addWidget(frilist);
    friendBox->setLayout(fbox);
    connect(friendButton,SIGNAL(clicked()),friendBox,SLOT(show()));
    connect(groupButton,SIGNAL(clicked()),friendBox,SLOT(hide()));

    QGroupBox *groupBox=new QGroupBox;
    grouplist=new QListWidget;
添加列表
   QGridLayout *gbox=new QGridLayout;
    gbox->addWidget(grouplist);
    groupBox->setLayout(gbox);
    groupBox->hide();
    connect(friendButton,SIGNAL(clicked()),groupBox,SLOT(hide()));
    connect(groupButton,SIGNAL(clicked()),groupBox,SLOT(show()));
    connect(frilist,SIGNAL(itemDoubleClicked(QListWidgetItem *,Item)),this,SLOT(connectFri(QListWidgetItem * )));

     QGridLayout *friendLayout=new QGridLayout;
     friendLayout->addWidget(friendButton);
     friendLayout->addWidget(groupButton);
     friendLayout->addWidget(friendBox);
     friendLayout->addWidget(groupBox);
     friendLayout->addWidget(buttonBox2);
     window->setLayout(friendLayout);
     window->setMaximumSize(200,350);
     window->setWindowTitle(tr("QQ2009"));
     window->show();
}

void friendlist::connectFri(QListWidgetItem * Item)
{
    chatWindow=new QWidget;
    displayText = new QTextEdit;
    displayText->setReadOnly(true);
    inputText = new QTextEdit;
    closeButton = new QPushButton(tr("&close"));
    sendButton = new QPushButton(tr("&send"));
    QVBoxLayout *buttonLayout = new QVBoxLayout;
    buttonLayout->addWidget(closeButton);
    buttonLayout->addWidget(sendButton);
    QGridLayout *chatLayout = new QGridLayout;
    chatLayout->addWidget(displayText, 0, 0, 6, 4);
    chatLayout->addWidget(inputText, 6, 0, 6, 3);
    chatLayout->addLayout(buttonLayout, 6, 3, 1, 1);
    chatWindow->setLayout(chatLayout);
    chatWindow->setWindowTitle(tr("chat with%1").arg(num));
    chatWindow->show();
}
离线rycstar
只看该作者 5楼 发表于: 2009-11-02
我把itemdoubleclicked换成itemclicked,居然单击就成功了。。。
为什么双击的信号不行,单击的信号可以呢?
快速回复
限100 字节
 
上一个 下一个