2013-08-05 59 views
0

在我的Qt应用程序中,我想动态添加一个新项目到一个列表视图。另外我还用信号&槽形式,所以我已经创建2种以下形式之间传送数据:QListWidget不能动态地添加项目

mainwindow.h

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

public slots: 
    void ReceivedData(QString item); 

private slots: 
    void on_btnAdd_clicked(); 

    void on_btnCancel_clicked(); 

private: 
    Ui::MainWindow *ui; 

    void SetUpListName(); 
}; 

addform.h

class AddForm : public QDialog 
{ 
    Q_OBJECT 

public: 
    explicit AddForm(QWidget *parent = 0); 
    ~AddForm(); 

signals: 
    void SendData(QString item); 

private slots: 
    void on_pushButton_clicked(); 

    void on_pushButton_2_clicked(); 

private: 
    Ui::AddForm *ui; 
    MainWindow *main_window; 
}; 

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    SetUpListName(); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::SetUpListName() 
{ 
    // Add 5 new elements 
    for (int i = 0; i < 5; i++) { 
     QString item = "Item " + QString::number(i); 
     ui->lwListItem->addItem(item); 

    } 
} 

void MainWindow::on_btnAdd_clicked() 
{ 
    // Open Add Form 
    AddForm add; 
    add.setModal(true); 
    add.exec(); 
} 

void MainWindow::on_btnCancel_clicked() 
{ 
    this->close(); 
} 

void MainWindow::ReceivedData(QString item) 
{ 
    // Check to receive data 
    qDebug() << "Item: " << item; 

    // Add a new item to list items 
    ui->lwListItem->addItem(item); 
} 

addform.cpp

AddForm::AddForm(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::AddForm) 
{ 
    ui->setupUi(this); 

    main_window = new MainWindow(); 
    connect(this, SIGNAL(SendData(QString)), main_window, SLOT(ReceivedData(QString))); 

} 

AddForm::~AddForm() 
{ 
    delete ui; 
} 

void AddForm::on_pushButton_clicked() 
{ 
    // Send data via Signal & Slot 
    emit SendData(ui->txtName->text()); 
} 

void AddForm::on_pushButton_2_clicked() 
{ 
    this->close(); 
} 

当我运行应用程序,我从数据添加形式,但列表视图添加此项目。

Cannot add an item dynamically

是否有人有任何解决方案?

谢谢!

P/S:您可以在here

回答

4

下载我的源代码要建立连接的信号,错了对象的插槽。在AddForm的构造函数中,您正在创建一个新的MainWindow并将信号连接到它的插槽,这意味着信号没有达到您的真实MainWindow,并且ReceivedData插槽正在将该项添加到错误的QListWidget。你应该做的是这样的:

void MainWindow::on_btnAdd_clicked() 
{ 
    // Open Add Form 
    AddForm add; 
    connect(&add, SIGNAL(SendData(QString)), this, SLOT(ReceivedData(QString))); 
    add.setModal(true); 
    add.exec(); 
} 

,并删除的新MainWindow的创建和相应的从AddForm构造connect通话。

+0

你是对的!这是我的错误。谢谢你的解释! –