【问题标题】:getting value of pointer from function QT C++从函数 QT C++ 获取指针的值
【发布时间】:2016-02-03 13:17:56
【问题描述】:

我在这方面花了这么多时间,我快要放弃了。我想要做的就是能够在 Qlabel 上显示存在卡的指针值。我是 C++ 和 QT 的新手。我已经阅读并观看了许多视频/教程,但仍然无法掌握这个概念。任何帮助将不胜感激。

typedef short  I16;

I16 existCards;
I16 CardNo=&existCards;


I16 _8134_initial(I16* existCards)
{
      return* existCards;
}


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

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



void MainWindow::on_pushButton_clicked()
{

   QString strForLabel = QString("0x") + QString::number(existCards, 16);
   ui->label->setText(strForLabel);
}

【问题讨论】:

  • 代码没有按照你的要求做:函数_8134_initial返回一个I16(值不是指针地址)并且你显示CardNo这又不是地址而是而是另一个short的值
  • existCards 初始化了吗?
  • 我已经按照 phyatt 更改了 QString 转换。但是我收到错误:C2440: 'initializing' : cannot convert from 'I16 *' to 'I16' 没有上下文可以进行这种转换。快到了。
  • 任何你传递指针的地方,你都不能传递值,你需要传递一个指针,比如return ptr;需要有一个int * func()函数的类型,否则它说你传递了错误的东西。与设置值相同。如果你制作一个指针,你必须将它存储在一个指针中。 I16* CardNo = &existCards;(注意I16后面的指针)。
  • 好的,我删除了 CardNo 声明。现在,当我运行程序时,标签上的输出为 0x0。如果我添加 I16* existsCards;作为变量 decleration,我得到错误:C2665:'QString::number':7 个重载中没有一个可以转换所有参数类型如果我将 *existCards 添加到 QString 参数,应用程序崩溃

标签: qt


【解决方案1】:

为了打印和调试指针,我建议使用qDebug()

#include <QDebug>

//...

int* intPtr = new int(3);
qDebug() << "intPtr's address is" << intPtr;

要从中创建一个字符串并在标签中使用它,您需要进行一些转换。

QString strForLabel = QString("0x") + QString::number(intPtr, 16);
ui->label->setText(strForLabel);

另外一种从堆栈中获取指针的方法是这样的:

int myInt = 3;
int * intPtr = &myInt;

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多