用户界面无法在qt app中更新

时间:2015-04-18 16:12:04

标签: c++ qt user-interface signals-slots qtablewidget

在上面的代码中,uitablewidget不会使用信号和插槽进行更新。 似乎(ui-> tableWidget-> setItem(0,0,newItemx);)不起作用。 我做错了什么,或者有更好的方法从我的班级B更新我的qtablewidget?

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

}

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


void Class_A::change_TableWidget(double x,double y) // this is the    public slot
{
QTableWidgetItem *newItemx = new QTableWidgetItem(QString::number(x));
ui->tableWidget->setItem(0,0,newItemx);
QTableWidgetItem *newItemy = new QTableWidgetItem(QString::number(y));
ui->tableWidget->setItem(0,0,newItemy);
}




Class_B::Class_B(QWidget *parent) :
 QGLWidget(parent)
{
Class_A *t=new Class_A;
connect(this,SIGNAL(mySignal(double,double)),t,SLOT(change_TableWidget(double,double)));
}


void Class_B::mousePressEvent(QMouseEvent *event)
{
double x = event->x();
double y = event->y();
emit mySignal(x,y);
}

1 个答案:

答案 0 :(得分:1)

你没有SLOT(change_TableWidget(double,double)) - 你需要3个双打,而不是2个。

你应该检查connect()是否返回true。我喜欢写东西 if(!connect(....))Q_ASSERT(false);

或if(!connect(....))Q_ASSERT(!" connect");

此外,当无法匹配信号和插槽时,连接会将消息打印到调试输出。你应该寻找那个输出。

(或使用新的Qt 5 connect(),它在编译时都被检查过。)