首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

关于tablewidget 查询跟更新数据(多个窗口)

2012-12-26 
关于tablewidget 查询和更新数据(多个窗口)目前有main.ui main.h main.cpp , a.ui a.h a.cpp, b.ui b.h b.

关于tablewidget 查询和更新数据(多个窗口)
目前有main.ui main.h main.cpp , a.ui a.h a.cpp, b.ui b.h b.cpp. 在a.ui中有tablewidget,编辑按钮。
main窗口通过按钮弹出 A窗口,A窗口通过按钮弹出B窗口,在B窗口中输入数据,点OK按钮后显示到B窗口的tablewidget。有两个问题:
1. 当在B窗口输入数据点OK按钮后,如何判断传过来的数据和tablewidget中已保存的数据是否相同;
2. 当我点击A窗口的编辑按钮时,弹出B窗口并修改数据点OK后更新原来的数据,该如何实现?
如果可以的话请详细点,谢谢!
[最优解释]
1 a中当你弹出b窗口的时候。要记录当前选中的item.
2 b的返回值和a.currentItem.text() 做比较。QVarinat(b.returnValue).toXXX();进行比较咯。
3 得到b的返回数据后更新a.tableWidget.currentItem的text就好了哇?


a.h
class A
{
     
   private slots:
   void upDateTableWidget(QString);
   private: 
     B *m_b;
     QTableWidget *m_tableWidget;
}
a.cpp
A:A()
{
    m_b = new B(XX);
    connect(m_b,SIGNAL(returnValue(QString),this,SLOT(upDateTableWidget(QString)));
}

A:upDateTableWidget(QString value)
{
    if(m_tableWidget)
    {
       m_tableWidget->currentSelectedItem->setText(value);
    }
}

b.h
Class B
{
    

    signals:
    void returnValue(QString);
    private slots:
    void onButtonClicked();
    private:
    m_button;
    m_lineEdit;
}

b.cpp

B:B()
{
    connect(m_button),SIGNAL(clicked()),this,SLOT(onButtonClicked());
    
}

void B:onButtonClicked()
{
    QString strRet = m_lineEdit->text();
    emit returnValue(strRet);
}

类似这种哈。该show的show..改隐藏的隐藏。。Q_OBJECT这些。。没写。只是伪代码哈。

[其他解释]
把信号槽关联好就可以了
[其他解释]

引用:
1 a中当你弹出b窗口的时候。要记录当前选中的item.
2 b的返回值和a.currentItem.text() 做比较。QVarinat(b.returnValue).toXXX();进行比较咯。
3 得到b的返回数据后更新a.tableWidget.currentItem的text就好了哇?


a.h
class A
{
     
   private slots:
……


在B窗口点OK按钮后要增加tableWidget数据或更新数据,不会有冲突吗?
[其他解释]
如果判断到A中已经有从B传过来的数据,该如何处理才能是的程序能够继续运行?是关闭哪个窗口还是怎么样?
[其他解释]
引用:
引用:1 a中当你弹出b窗口的时候。要记录当前选中的item.
2 b的返回值和a.currentItem.text() 做比较。QVarinat(b.returnValue).toXXX();进行比较咯。
3 得到b的返回数据后更新a.tableWidget.currentItem的text就好了哇?


a.h
c……
不会冲突。都是在gui线程里 顺序执行的。
[其他解释]
引用:
如果判断到A中已经有从B传过来的数据,该如何处理才能是的程序能够继续运行?是关闭哪个窗口还是怎么样?
直接连接信号槽。当编辑完了 发出信号,这个时候b.hide()就好了。 下次show一下。
[其他解释]
void B:onButtonClicked()


{
    QString strRet = m_lineEdit->text();
    emit returnValue(strRet);

}


[其他解释]
void B:onButtonClicked()
{
    QString ret =  m_lineEdit->text();
    QString strRet = m_lineEdit->text();
    emit returnValue(strRet);
    emit hanle(ret );
}

这样不会有冲突?
[其他解释]
另外我在发送完信号后清空m_lineEdit->text();会瞬间出现原来的数据,我在构造函数里清空也一样,这个该如何解决呢?

[其他解释]
你是要清空lineEdit的数据?

m_linEidt->setText("");

构造函数只有在对象生成的时候才调用。。。。。
[其他解释]
当我在B窗口中添加数据点击OK按钮后在A窗口中有显示,我在A窗口中点ADD按钮后会B窗口会保留上次输入的数据,我在构造函数调用m_linEidt->setText(""); 当我在A窗口中点ADD按钮后弹出B窗口,仍然会瞬间出现上次的数据后消失,有没办法避免出现这种情况?


[其他解释]
void B:onButtonClicked()
{
    QString ret =  m_lineEdit->text();
    QString strRet = m_lineEdit->text();
    emit returnValue(strRet);
    emit hanle(ret );
    
    //在这里清空
    m_lineEdit->setText(;;;

}
[其他解释]

引用:
void B:onButtonClicked()
{
    QString ret =  m_lineEdit->text();
    QString strRet = m_lineEdit->text();
    emit returnValue(strRet);
    emit hanle(ret );
    
    //在这里清空
    m_lineEdit->……

我就是这样写,原来的数据会闪下后消失。
[其他解释]
void B:onButtonClicked()
{
    QString ret =  m_lineEdit->text();
    QString strRet = m_lineEdit->text();

       //在这里呢?
     m_lineEdit->setText(;;;

    emit returnValue(strRet);
    emit hanle(ret );
    
 
   


[其他解释]
也是一样的情况
[其他解释]
allencui0313 :
如果这样的话对应的两个槽都会执行。
void B:onButtonClicked()
{
    QString strRet = m_lineEdit->text();

       //在这里呢?
     m_lineEdit->setText(;;;

    emit returnValue(strRet);
    emit hanle(strRet );
}  


[其他解释]
在B中是有4个LineEdit

热点排行