-1

を拡張する次のクラスがありますが、目的のスロットに信号をQListWidget接続できないようです。doubleClickedこれがVS2012で実装されたコードです。アイデアは、アイテムをダブルクリックして編集できるようにすることです。シグナルをコンストラクターのスロットに接続しますが、デバッガーで実行してもスロットが呼び出されません。

# .h file
class DisplayFeed :
    public QListWidget
{
    Q_OBJECT
public:
    DisplayFeed(QWidget *parent, Logic *logic, int xpos, int ypos, int width, int height, std::string color);
    ~DisplayFeed(void);
    void setColor(std::string color);
    void refresh(std::vector<Event*> *thingsToInclude);
private:
    Logic* logic;
private slots:
    void editItem(QEventStore *item);
};

以下は .cpp ファイルです。QEventStore伸びQListWidgetItemます。他のコードが機能しなかった場合に備えて、MessageBox を配置してシステムもテストしました。

# .cpp file, only relevant methods included
DisplayFeed::DisplayFeed(QWidget *parent, Logic *logic, int xpos, int ypos, int width, int height, std::string color)
: QListWidget(parent)
{
    this->logic = logic;
    setGeometry(xpos, ypos, width, height);
    setColor(color);
    QObject::connect(this, SIGNAL(itemClicked(QEventStore*)), this, SLOT(editItem(QEventStore*)));
    show();
}

void DisplayFeed::editItem(QEventStore *item){
    QMessageBox::information(this,"Hello!","You clicked \""+item->text()+"\"");
    QEventEditor *editor = new QEventEditor(item->getEvent());
}
4

3 に答える 3

0

私は答えを見つけました。問題は、デフォルトのシグナルが をitemDoubleClicked発行し、QListWidgetItem*そのサブクラスを発行することが機能しないことです。だから私がしなければならなかったのは、に行ってeditItemそれを動的にキャストすることでしQListWidgetItem*QEventStore*

于 2014-10-15T17:45:29.970 に答える
0

いくつかの変更を行う必要があります。

  1. にQ_OBJECTを追加します。displayFeed クラスのh

    class DisplayFeed : public QListWidget
    {
        Q_OBJECT
        ...
    };
    
  2. パブリック スロットQListWidgetItem*パラメータを使用してスロットを変更します

    public slots:
        void editItem(QListWidgetItem *item);
    
  3. SLOTと同じパラメーターを持つ良いSIGNALに接続します

    connect(this,SIGNAL(itemDoubleClicked(QListWidgetItem*)), this,SLOT(editItem(QListWidgetItem*)));
    

これは私にとってはうまくいきます。

于 2014-10-14T07:23:45.080 に答える
0

クラスでQ_OBJECTマクロを忘れました。DisplayFeed次のようになります。

# .h file
class DisplayFeed :
    public QListWidget
{
  Q_OBJECT

public:
    DisplayFeed(QWidget *parent, Logic *logic, int xpos, int ypos, int width, int height, std::string color);
    ~DisplayFeed(void);
    void setColor(std::string color);
    void refresh(std::vector<Event*> *thingsToInclude);
private:
    Logic* logic;
private slots:
    void editItem(QEventStore *item);
};

それが私が最初に気づいたことであり、あなたの問題を解決するかもしれません. そうでない場合は、もっと深く見ていきます。

編集:ここで最初の答えを読んでください

于 2014-10-14T03:26:38.803 に答える