2016-02-03 4 views
0

Я потратил столько времени на это, я нахожусь в состоянии сдаться. Все, что я хочу сделать, это показать значение указателя existCards на Qlabel. Я новичок в C++ и QT. Я читал и смотрел много видео/учебников и до сих пор не могу понять концепцию. Любая помощь будет оценена.Получение значения указателя из функции QT C++

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); 
} 
+0

код не выполняет то, что вы запрашиваете: функция '_8134_initial' возвращает I16 (значение не адрес указателя), и вы показываете« CardNo », который опять не является адресом, а скорее значением другого 'short' – bibi

+0

Является ли' existCards' инициализированным? – vahancho

+0

Я изменил преобразование QString в соответствии с phyatt. Однако я получаю сообщение об ошибке: C2440: 'initializing': не может конвертировать из 'I16 *' в 'I16' Нет никакого контекста, в котором это преобразование возможно. Почти готово. – Hank

ответ

0

Для распечатки указателей и отладки их, я бы рекомендовал использовать 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; 

Надежда, что помогает.