如何访问Qt中另一个类的变量
How to access a variable from another class in Qt?
我试图在Qt中实现一个主窗口,它有两个小部件:一个区域是我画一些点的地方,另一个列表框是我用它们各自的坐标写所有点的地方。我想实现主窗口上按钮的"删除点"功能,即当我按下按钮时,从列表框中选择的点应该从我绘图的区域中消失。所以我想用信号/插槽来做这件事,但当我试图从绘图区域访问我的点列表时,却找不到任何包含的数据。这是我到现在为止的代码:
paintwidget.cpp(我的主窗口):
PaintWidget::PaintWidget(QWidget parent) :
QWidget(parent),
ui(new Ui::PaintWidget)
{
area = new RenderArea(this);
ui->setupUi(this);
connect(ui->displayWidget, SIGNAL(listUpdated(QList)), ui->pointsListWidget,
SLOT(onListUpdated(QList*)));
connect(ui->deletePoints, SIGNAL(clicked()), this, SLOT(deleteItem()));
}
void PaintWidget::deleteItem()
{
area->deletePoint(ui->pointsListWidget->currentItem());
}
renderarea.cpp(我的绘图区域):
void RenderArea::mousePressEvent(QMouseEvent *e)
{
point = e->pos();
updateList(point);
this->update();
}
void RenderArea::updateList(const QPoint& p)
{
list.append(p);
if (list.count()>1)
lineAdded(p);
emit listUpdated(&list);
}
void RenderArea::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);
painter.setPen(QPen(Qt::black,2));
for (int i = 0; i < list.size(); ++i)
painter.drawPoint(list[i]);
if (list.size()>1)
for(int j = 0; j < list.size()-1; ++j)
painter.drawLine(list[j], list[j+1]);
}
void RenderArea::deletePoint(QListWidgetItem *item)
{
bool ok1;
bool ok2;
int index = item->text().indexOf(",");
int x = item->text().left(index).toInt(&ok1, 10);
int y = item->text().mid(index + 1).toInt(&ok2, 10);
for (int i = 0; i < list.size(); ++i)
//find the point with x and y as coordinates and delete it
}
listbox.cpp:
void ListBox::onListUpdated(QList *list)
{
clear();
for (int i = 0; i < list->size(); ++i)
addItem(new QListWidgetItem(QString::number(list->at(i).x()) + ", " +
QString::number(list->at(i).y())));
}
渲染区域中的列表是QPoints的QList。问题是,在FOR循环中,列表的大小是0,所以我看不到它应该包含的任何点。我想我没能在某个地方初始化它,但我不确定在哪里。
这些点是用QPainter绘制的,所以当我从列表中删除点时,是否也有可能从我的绘图区域中删除它们?
我怀疑出于某种原因,您有两个RenderArea
小部件在附近徘徊。
您正在连接ui->displayWidget
的信号,但正在对area
小部件执行删除操作。
你不应该呼叫ui->displayWidget->deletePoint
或连接area
的信号吗?
至于重新绘制,您应该调用小部件的update()
方法,让它重新绘制自己。
相关文章:
- 一个变量的输入值也会保存到另一个变量中
- 将双精度变量设置为另一个变量的值
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 我如何将一个变量与另一个变量进行比较,例如我想如果(var1 > var2 x 1),然后执行此 c++
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 如何将行的第一个单词作为一个变量,将行的其余部分作为另一个变量进行归档/存储
- 打印一个变量将打印另一个变量的值(以 C++ 为单位)
- 如何将一个变量声明为另一个变量的值
- C BITSHIFT导致另一个变量引起问题
- C++字符串类如何将一个变量转换为另一个变量?
- 如何将字符串作为变量与另一个变量字符串进行比较
- C++循环变量按另一个变量递增
- C++ - 将一个变量分配给另一个变量和将变量分配给引用变量有什么区别?
- C 如何基于另一个变量和某些算术定义变量的值
- 我可以使用变量模板声明另一个变量模板
- 在C++中使用另一个变量作为数组索引限制
- 当类名存储在另一个变量中时,如何创建类的实例
- 如何在 switch 语句之后将变量添加到另一个变量
- 从另一个变量访问变量
- 如何使用另一个变量声明一个变量